tests/tcg/loongarch64: Add pcadd related instructions test

This includes:
- PCADDI
- PCADDU12I
- PCADDU18I
- PCALAU12I

Signed-off-by: Song Gao <gaosong@loongson.cn>
Message-Id: <20220716085426.3098060-9-gaosong@loongson.cn>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Song Gao 2022-07-16 16:54:26 +08:00 committed by Richard Henderson
parent 500cd33abb
commit 0c7213dd66
2 changed files with 39 additions and 0 deletions

View File

@ -14,5 +14,6 @@ LOONGARCH64_TESTS = test_bit
LOONGARCH64_TESTS += test_div
LOONGARCH64_TESTS += test_fclass
LOONGARCH64_TESTS += test_fpcom
LOONGARCH64_TESTS += test_pcadd
TESTS += $(LOONGARCH64_TESTS)

View File

@ -0,0 +1,38 @@
#include <assert.h>
#include <inttypes.h>
#include <string.h>
#define TEST_PCADDU(N) \
void test_##N(int a) \
{ \
uint64_t rd1 = 0; \
uint64_t rd2 = 0; \
uint64_t rm, rn; \
\
asm volatile(""#N" %0, 0x104\n\t" \
""#N" %1, 0x12345\n\t" \
: "=r"(rd1), "=r"(rd2) \
: ); \
rm = rd2 - rd1; \
if (!strcmp(#N, "pcalau12i")) { \
rn = ((0x12345UL - 0x104) << a) & ~0xfff; \
} else { \
rn = ((0x12345UL - 0x104) << a) + 4; \
} \
assert(rm == rn); \
}
TEST_PCADDU(pcaddi)
TEST_PCADDU(pcaddu12i)
TEST_PCADDU(pcaddu18i)
TEST_PCADDU(pcalau12i)
int main()
{
test_pcaddi(2);
test_pcaddu12i(12);
test_pcaddu18i(18);
test_pcalau12i(12);
return 0;
}