qemu/tests/tcg/loongarch64/test_pcadd.c
Song Gao 0c7213dd66 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>
2022-07-19 22:55:10 +05:30

39 lines
1.2 KiB
C

#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;
}