mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-10 05:37:06 +00:00
SSAX SXTAB16 SHASX SHSAX SHSUB16 SHSUB8 UASX USAX UQADD16 UQASX UQSAX UHASX UHSAX REVSH Pertaining to 321363 321364 321466 321467 321468 321619 321704 321620 321621 321692 321694 321696 321697 321703 (Vasily, w.golubev@mail.ru) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13447
1215 lines
59 KiB
C
1215 lines
59 KiB
C
|
|
/* How to compile:
|
|
gcc -O -g -Wall -mcpu=cortex-a8 -o testarmv6int testarmv6int.c
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
|
|
/* test macros to generate and output the result of a single instruction */
|
|
#define TESTINST2(instruction, RMval, RD, RM, carryin) \
|
|
{ \
|
|
unsigned int out; \
|
|
unsigned int cpsr; \
|
|
\
|
|
__asm__ volatile( \
|
|
"movs %3,%3;" \
|
|
"msrne cpsr_f,#(1<<29);" \
|
|
"msreq cpsr_f,#0;" \
|
|
"mov " #RM ",%2;" \
|
|
/* set #RD to 0x55555555 so we can see which parts get overwritten */ \
|
|
"mov " #RD ", #0x55" "\n\t" \
|
|
"orr " #RD "," #RD "," #RD ", LSL #8" "\n\t" \
|
|
"orr " #RD "," #RD "," #RD ", LSL #16" "\n\t" \
|
|
instruction ";" \
|
|
"mov %0," #RD ";" \
|
|
"mrs %1,cpsr;" \
|
|
: "=&r" (out), "=&r" (cpsr) \
|
|
: "r" (RMval), "r" (carryin) \
|
|
: #RD, #RM, "cc", "memory" \
|
|
); \
|
|
printf("%s :: rd 0x%08x rm 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
|
|
instruction, out, RMval, \
|
|
carryin ? 1 : 0, \
|
|
cpsr & 0xffff0000, \
|
|
((1<<31) & cpsr) ? 'N' : ' ', \
|
|
((1<<30) & cpsr) ? 'Z' : ' ', \
|
|
((1<<29) & cpsr) ? 'C' : ' ', \
|
|
((1<<28) & cpsr) ? 'V' : ' ' \
|
|
); \
|
|
}
|
|
|
|
#define TESTINST3(instruction, RMval, RNval, RD, RM, RN, carryin) \
|
|
{ \
|
|
unsigned int out; \
|
|
unsigned int cpsr; \
|
|
\
|
|
__asm__ volatile( \
|
|
"movs %4,%4;" \
|
|
"msrne cpsr_f,#(1<<29);" \
|
|
"msreq cpsr_f,#0;" \
|
|
"mov " #RM ",%2;" \
|
|
"mov " #RN ",%3;" \
|
|
instruction ";" \
|
|
"mov %0," #RD ";" \
|
|
"mrs %1,cpsr;" \
|
|
: "=&r" (out), "=&r" (cpsr) \
|
|
: "r" (RMval), "r" (RNval), "r" (carryin) \
|
|
: #RD, #RM, #RN, "cc", "memory" \
|
|
); \
|
|
printf("%s :: rd 0x%08x rm 0x%08x, rn 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
|
|
instruction, out, RMval, RNval, \
|
|
carryin ? 1 : 0, \
|
|
cpsr & 0xffff0000, \
|
|
((1<<31) & cpsr) ? 'N' : ' ', \
|
|
((1<<30) & cpsr) ? 'Z' : ' ', \
|
|
((1<<29) & cpsr) ? 'C' : ' ', \
|
|
((1<<28) & cpsr) ? 'V' : ' ' \
|
|
); \
|
|
}
|
|
|
|
#define TESTINST4(instruction, RMval, RNval, RSval, RD, RM, RN, RS, carryin) \
|
|
{ \
|
|
unsigned int out; \
|
|
unsigned int cpsr; \
|
|
\
|
|
__asm__ volatile( \
|
|
"movs %5,%5;" \
|
|
"msrne cpsr_f,#(1<<29);" \
|
|
"msreq cpsr_f,#0;" \
|
|
"mov " #RM ",%2;" \
|
|
"mov " #RN ",%3;" \
|
|
"mov " #RS ",%4;" \
|
|
instruction ";" \
|
|
"mov %0," #RD ";" \
|
|
"mrs %1,cpsr;" \
|
|
: "=&r" (out), "=&r" (cpsr) \
|
|
: "r" (RMval), "r" (RNval), "r" (RSval), "r" (carryin) \
|
|
: #RD, #RM, #RN, #RS, "cc", "memory" \
|
|
); \
|
|
printf("%s :: rd 0x%08x rm 0x%08x, rn 0x%08x rs 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
|
|
instruction, out, RMval, RNval, RSval, \
|
|
carryin ? 1 : 0, \
|
|
cpsr & 0xffff0000, \
|
|
((1<<31) & cpsr) ? 'N' : ' ', \
|
|
((1<<30) & cpsr) ? 'Z' : ' ', \
|
|
((1<<29) & cpsr) ? 'C' : ' ', \
|
|
((1<<28) & cpsr) ? 'V' : ' ' \
|
|
); \
|
|
}
|
|
|
|
#define TESTINST4_2OUT(instruction, RDval, RD2val, RMval, RSval, RD, RD2, RM, RS, carryin) \
|
|
{ \
|
|
unsigned int out; \
|
|
unsigned int out2; \
|
|
unsigned int cpsr; \
|
|
\
|
|
__asm__ volatile( \
|
|
"movs %7,%7;" \
|
|
"msrne cpsr_f,#(1<<29);" \
|
|
"msreq cpsr_f,#0;" \
|
|
"mov " #RD ",%3;" \
|
|
"mov " #RD2 ",%4;" \
|
|
"mov " #RM ",%5;" \
|
|
"mov " #RS ",%6;" \
|
|
instruction ";" \
|
|
"mov %0," #RD ";" \
|
|
"mov %1," #RD2 ";" \
|
|
"mrs %2,cpsr;" \
|
|
: "=&r" (out), "=&r" (out2), "=&r" (cpsr) \
|
|
: "r" (RDval), "r" (RD2val), "r" (RMval), "r" (RSval), "r" (carryin) \
|
|
: #RD, #RD2, #RM, #RS, "cc", "memory" \
|
|
); \
|
|
printf("%s :: rd 0x%08x rd2 0x%08x, rm 0x%08x rs 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
|
|
instruction, out, out2, RMval, RSval, \
|
|
carryin ? 1 : 0, \
|
|
cpsr & 0xffff0000, \
|
|
((1<<31) & cpsr) ? 'N' : ' ', \
|
|
((1<<30) & cpsr) ? 'Z' : ' ', \
|
|
((1<<29) & cpsr) ? 'C' : ' ', \
|
|
((1<<28) & cpsr) ? 'V' : ' ' \
|
|
); \
|
|
}
|
|
|
|
/* helpers */
|
|
#define TESTCARRY { int c = 0; for (c = 0; c < 2; c++) {
|
|
#define TESTCARRYEND }}
|
|
|
|
|
|
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
|
|
printf("MOV\n");
|
|
TESTINST2("mov r0, r1", 1, r0, r1, 0);
|
|
TESTINST2("cpy r0, r1", 1, r0, r1, 0);
|
|
TESTINST2("mov r0, #0", 0, r0, r1, 0);
|
|
TESTINST2("mov r0, #1", 0, r0, r1, 0);
|
|
TESTCARRY
|
|
TESTINST2("movs r0, r1", 1, r0, r1, c);
|
|
TESTINST2("movs r0, r1", 0, r0, r1, c);
|
|
TESTINST2("movs r0, r1", 0x80000000, r0, r1, c);
|
|
TESTINST2("movs r0, #0", 0, r0, r1, c);
|
|
TESTINST2("movs r0, #1", 0, r0, r1, c);
|
|
TESTCARRYEND
|
|
|
|
printf("MVN\n");
|
|
TESTINST2("mvn r0, r1", 1, r0, r1, 0);
|
|
TESTCARRY
|
|
TESTINST2("mvns r0, r1", 1, r0, r1, c);
|
|
TESTINST2("mvns r0, r1", 0, r0, r1, c);
|
|
TESTINST2("mvns r0, r1", 0x80000000, r0, r1, c);
|
|
TESTCARRYEND
|
|
|
|
printf("ADD\n");
|
|
TESTINST3("adds r0, r1, r2", 0, 0, r0, r1, r2, 0);
|
|
TESTINST3("adds r0, r1, r2", 0, 1, r0, r1, r2, 0);
|
|
TESTINST3("adds r0, r1, r2", 1, 0, r0, r1, r2, 0);
|
|
TESTINST3("adds r0, r1, r2", 1, 1, r0, r1, r2, 0);
|
|
TESTINST3("adds r0, r1, r2", 0, -1, r0, r1, r2, 0);
|
|
TESTINST3("adds r0, r1, r2", 1, -1, r0, r1, r2, 0);
|
|
TESTINST3("adds r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, 0);
|
|
TESTINST3("adds r0, r1, r2", 0x80000000, -1, r0, r1, r2, 0);
|
|
TESTINST3("adds r0, r1, r2", 0x80000000, 0, r0, r1, r2, 0);
|
|
|
|
printf("ADC\n");
|
|
TESTINST3("adcs r0, r1, r2", 0, 0, r0, r1, r2, 0);
|
|
TESTINST3("adcs r0, r1, r2", 0, 0, r0, r1, r2, 1);
|
|
|
|
printf("LSL\n");
|
|
TESTINST3("lsl r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0xffffffff, 1, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0xffffffff, 2, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0xffffffff, 31, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0xffffffff, 32, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0xffffffff, 33, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0xffffffff, 63, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0xffffffff, 64, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0xffffffff, 255, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0xffffffff, 256, r0, r1, r2, 0);
|
|
|
|
TESTINST3("lsl r0, r1, r2", 0x1, 0, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0x1, 1, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0x1, 31, r0, r1, r2, 0);
|
|
TESTINST3("lsl r0, r1, r2", 0x2, 31, r0, r1, r2, 0);
|
|
|
|
printf("LSLS\n");
|
|
TESTCARRY
|
|
TESTINST3("lsls r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0x1, 0, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0x1, 1, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0x1, 31, r0, r1, r2, c);
|
|
TESTINST3("lsls r0, r1, r2", 0x2, 31, r0, r1, r2, c);
|
|
TESTCARRYEND
|
|
|
|
printf("LSL immediate\n");
|
|
TESTCARRY
|
|
TESTINST2("lsl r0, r1, #0", 0xffffffff, r0, r1, c);
|
|
TESTINST2("lsl r0, r1, #1", 0xffffffff, r0, r1, c);
|
|
TESTINST2("lsl r0, r1, #31", 0xffffffff, r0, r1, c);
|
|
TESTINST2("lsl r0, r1, #0", 0x1, r0, r1, c);
|
|
TESTINST2("lsl r0, r1, #1", 0x1, r0, r1, c);
|
|
TESTINST2("lsl r0, r1, #31", 0x1, r0, r1, c);
|
|
TESTINST2("lsl r0, r1, #31", 0x2, r0, r1, c);
|
|
TESTCARRYEND
|
|
|
|
printf("LSLS immediate\n");
|
|
TESTCARRY
|
|
TESTINST2("lsls r0, r1, #0", 0xffffffff, r0, r1, c);
|
|
TESTINST2("lsls r0, r1, #1", 0xffffffff, r0, r1, c);
|
|
TESTINST2("lsls r0, r1, #31", 0xffffffff, r0, r1, c);
|
|
TESTINST2("lsls r0, r1, #0", 0x1, r0, r1, c);
|
|
TESTINST2("lsls r0, r1, #1", 0x1, r0, r1, c);
|
|
TESTINST2("lsls r0, r1, #31", 0x1, r0, r1, c);
|
|
TESTINST2("lsls r0, r1, #31", 0x2, r0, r1, c);
|
|
TESTCARRYEND
|
|
|
|
printf("LSR\n");
|
|
TESTINST3("lsr r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
|
|
TESTINST3("lsr r0, r1, r2", 0xffffffff, 1, r0, r1, r2, 0);
|
|
TESTINST3("lsr r0, r1, r2", 0xffffffff, 2, r0, r1, r2, 0);
|
|
TESTINST3("lsr r0, r1, r2", 0xffffffff, 31, r0, r1, r2, 0);
|
|
TESTINST3("lsr r0, r1, r2", 0xffffffff, 32, r0, r1, r2, 0);
|
|
TESTINST3("lsr r0, r1, r2", 0xffffffff, 33, r0, r1, r2, 0);
|
|
TESTINST3("lsr r0, r1, r2", 0xffffffff, 63, r0, r1, r2, 0);
|
|
TESTINST3("lsr r0, r1, r2", 0xffffffff, 64, r0, r1, r2, 0);
|
|
TESTINST3("lsr r0, r1, r2", 0xffffffff, 255, r0, r1, r2, 0);
|
|
TESTINST3("lsr r0, r1, r2", 0xffffffff, 256, r0, r1, r2, 0);
|
|
|
|
printf("LSRS\n");
|
|
TESTCARRY
|
|
TESTINST3("lsrs r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
|
|
TESTINST3("lsrs r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
|
|
TESTINST3("lsrs r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
|
|
TESTINST3("lsrs r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
|
|
TESTINST3("lsrs r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
|
|
TESTINST3("lsrs r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
|
|
TESTINST3("lsrs r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
|
|
TESTINST3("lsrs r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
|
|
TESTINST3("lsrs r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
|
|
TESTCARRYEND
|
|
|
|
printf("LSR immediate\n");
|
|
TESTINST2("lsr r0, r1, #0", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("lsr r0, r1, #1", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("lsr r0, r1, #31", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("lsr r0, r1, #32", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("lsr r0, r1, #16", 0x00010000, r0, r1, 0);
|
|
TESTINST2("lsr r0, r1, #17", 0x00010000, r0, r1, 0);
|
|
TESTINST2("lsr r0, r1, #18", 0x00010000, r0, r1, 0);
|
|
|
|
printf("LSRS immediate\n");
|
|
TESTCARRY
|
|
TESTINST2("lsrs r0, r1, #0", 0xffffffff, r0, r1, c);
|
|
TESTINST2("lsrs r0, r1, #1", 0xffffffff, r0, r1, c);
|
|
TESTINST2("lsrs r0, r1, #31", 0xffffffff, r0, r1, c);
|
|
TESTINST2("lsrs r0, r1, #32", 0xffffffff, r0, r1, c);
|
|
TESTINST2("lsrs r0, r1, #16", 0x00010000, r0, r1, c);
|
|
TESTINST2("lsrs r0, r1, #17", 0x00010000, r0, r1, c);
|
|
TESTINST2("lsrs r0, r1, #18", 0x00010000, r0, r1, c);
|
|
TESTCARRYEND
|
|
|
|
printf("ASR\n");
|
|
TESTCARRY
|
|
TESTINST3("asr r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0x7fffffff, 0, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0x7fffffff, 2, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0x7fffffff, 31, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0x7fffffff, 32, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0x7fffffff, 33, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0x7fffffff, 63, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0x7fffffff, 64, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0x7fffffff, 255, r0, r1, r2, c);
|
|
TESTINST3("asr r0, r1, r2", 0x7fffffff, 256, r0, r1, r2, c);
|
|
TESTCARRYEND
|
|
|
|
printf("ASRS\n");
|
|
TESTCARRY
|
|
TESTINST3("asrs r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x7fffffff, 0, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x7fffffff, 2, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x7fffffff, 31, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x7fffffff, 32, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x7fffffff, 33, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x7fffffff, 63, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x7fffffff, 64, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x7fffffff, 255, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x7fffffff, 256, r0, r1, r2, c);
|
|
TESTCARRYEND
|
|
|
|
TESTCARRY
|
|
TESTINST3("asrs r0, r1, r2", 0x8, 0, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x8, 1, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x8, 2, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x8, 3, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x8, 4, r0, r1, r2, c);
|
|
TESTINST3("asrs r0, r1, r2", 0x8, 5, r0, r1, r2, c);
|
|
TESTCARRYEND
|
|
|
|
TESTINST3("asrs r0, r1, r2", 0x80000001, 1, r0, r1, r2, 0);
|
|
TESTINST3("asrs r0, r1, r2", 0x80000001, 2, r0, r1, r2, 0);
|
|
|
|
printf("ASR immediate\n");
|
|
TESTINST2("asr r0, r1, #0", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("asr r0, r1, #1", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("asr r0, r1, #31", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("asr r0, r1, #32", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("asr r0, r1, #0", 0x7fffffff, r0, r1, 0);
|
|
TESTINST2("asr r0, r1, #1", 0x7fffffff, r0, r1, 0);
|
|
TESTINST2("asr r0, r1, #31", 0x7fffffff, r0, r1, 0);
|
|
TESTINST2("asr r0, r1, #32", 0x7fffffff, r0, r1, 0);
|
|
TESTINST2("asr r0, r1, #16", 0x00010000, r0, r1, 0);
|
|
TESTINST2("asr r0, r1, #17", 0x00010000, r0, r1, 0);
|
|
TESTINST2("asr r0, r1, #18", 0x00010000, r0, r1, 0);
|
|
|
|
printf("ASRS immediate\n");
|
|
TESTCARRY
|
|
TESTINST2("asrs r0, r1, #0", 0xffffffff, r0, r1, c);
|
|
TESTINST2("asrs r0, r1, #1", 0xffffffff, r0, r1, c);
|
|
TESTINST2("asrs r0, r1, #31", 0xffffffff, r0, r1, c);
|
|
TESTINST2("asrs r0, r1, #32", 0xffffffff, r0, r1, c);
|
|
TESTINST2("asrs r0, r1, #0", 0x7fffffff, r0, r1, c);
|
|
TESTINST2("asrs r0, r1, #1", 0x7fffffff, r0, r1, c);
|
|
TESTINST2("asrs r0, r1, #31", 0x7fffffff, r0, r1, c);
|
|
TESTINST2("asrs r0, r1, #32", 0x7fffffff, r0, r1, c);
|
|
TESTINST2("asrs r0, r1, #16", 0x00010000, r0, r1, c);
|
|
TESTINST2("asrs r0, r1, #17", 0x00010000, r0, r1, c);
|
|
TESTINST2("asrs r0, r1, #18", 0x00010000, r0, r1, c);
|
|
TESTCARRYEND
|
|
|
|
printf("ROR\n");
|
|
TESTCARRY
|
|
TESTINST3("ror r0, r1, r2", 0x00088000, 0, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x80088000, 1, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x00088000, 1, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x00088000, 2, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x00088000, 31, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x00088000, 32, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x00088000, 33, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x00088000, 63, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x00088000, 64, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x00088000, 255, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x00088000, 256, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x80088000, 256, r0, r1, r2, c);
|
|
TESTINST3("ror r0, r1, r2", 0x00088000, 257, r0, r1, r2, c);
|
|
TESTCARRYEND
|
|
|
|
printf("RORS\n");
|
|
TESTCARRY
|
|
TESTINST3("rors r0, r1, r2", 0x00088000, 0, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x80088000, 0, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x00088000, 1, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x00088000, 2, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x00088000, 31, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x00088000, 32, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x00088000, 33, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x00088000, 63, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x00088000, 64, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x00088000, 255, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x00088000, 256, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x80088000, 256, r0, r1, r2, c);
|
|
TESTINST3("rors r0, r1, r2", 0x00088000, 257, r0, r1, r2, c);
|
|
TESTCARRYEND
|
|
|
|
printf("ROR immediate\n");
|
|
TESTCARRY
|
|
TESTINST2("ror r0, r1, #0", 0x00088000, r0, r1, c);
|
|
TESTINST2("ror r0, r1, #1", 0x00088000, r0, r1, c);
|
|
TESTINST2("ror r0, r1, #31", 0x00088000, r0, r1, c);
|
|
TESTINST2("ror r0, r1, #16", 0x00010000, r0, r1, c);
|
|
TESTINST2("ror r0, r1, #17", 0x00010000, r0, r1, c);
|
|
TESTINST2("ror r0, r1, #18", 0x00010000, r0, r1, c);
|
|
TESTCARRYEND
|
|
|
|
printf("RORS immediate\n");
|
|
TESTCARRY
|
|
TESTINST2("rors r0, r1, #0", 0x00088000, r0, r1, c);
|
|
TESTINST2("rors r0, r1, #1", 0x00088000, r0, r1, c);
|
|
TESTINST2("rors r0, r1, #31", 0x00088000, r0, r1, c);
|
|
TESTINST2("rors r0, r1, #16", 0x00010000, r0, r1, c);
|
|
TESTINST2("rors r0, r1, #17", 0x00010000, r0, r1, c);
|
|
TESTINST2("rors r0, r1, #18", 0x00010000, r0, r1, c);
|
|
TESTCARRYEND
|
|
|
|
printf("shift with barrel shifter\n");
|
|
TESTCARRY
|
|
TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsl r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 1, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 31, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 32, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 255, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x7fffffff, 256, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
|
|
TESTCARRYEND
|
|
|
|
TESTCARRY
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 1, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 2, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 3, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 4, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, asr r3", 0, 0x8, 5, r0, r1, r2, r3, c);
|
|
TESTCARRYEND
|
|
|
|
TESTCARRY
|
|
TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, ror r3", 0, 0x80088000, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 1, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 31, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 32, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 255, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 256, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, ror r3", 0, 0x80088000, 256, r0, r1, r2, r3, c);
|
|
TESTINST4("add r0, r1, r2, ror r3", 0, 0x00088000, 257, r0, r1, r2, r3, c);
|
|
TESTCARRYEND
|
|
|
|
TESTCARRY
|
|
TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
|
|
|
|
TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, ror r3", 0, 0x80088000, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 1, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 31, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 32, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 255, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 256, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, ror r3", 0, 0x80088000, 256, r0, r1, r2, r3, c);
|
|
TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 257, r0, r1, r2, r3, c);
|
|
TESTCARRYEND
|
|
|
|
TESTCARRY
|
|
TESTINST4("adcs r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("adcs r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
|
|
TESTINST4("adcs r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
|
|
TESTINST4("adcs r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
|
|
TESTCARRYEND
|
|
|
|
printf("MUL\n");
|
|
TESTINST3("mul r0, r1, r2", 0, 0, r0, r1, r2, 0);
|
|
TESTINST3("mul r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
|
|
TESTINST3("mul r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
|
|
TESTINST3("mul r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
|
|
TESTINST3("mul r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
|
|
TESTINST3("mul r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
|
|
|
|
printf("MULS\n");
|
|
TESTINST3("muls r0, r1, r2", 0, 0, r0, r1, r2, 0);
|
|
TESTINST3("muls r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
|
|
TESTINST3("muls r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
|
|
TESTINST3("muls r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
|
|
TESTINST3("muls r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
|
|
TESTINST3("muls r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
|
|
|
|
printf("MLA\n");
|
|
TESTINST4("mla r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mla r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mla r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mla r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mla r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mla r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
|
|
|
|
printf("MLAS\n");
|
|
TESTINST4("mlas r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mlas r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mlas r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mlas r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mlas r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mlas r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
|
|
|
|
printf("MLS\n");
|
|
TESTINST4("mls r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mls r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mls r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mls r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mls r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4("mls r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
|
|
|
|
printf("UMULL\n");
|
|
TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umull r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
|
|
|
|
printf("SMULL\n");
|
|
TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smull r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
|
|
|
|
printf("UMLAL\n");
|
|
TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlal r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlal r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlals r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
|
|
|
|
printf("SMLAL\n");
|
|
TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlal r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlal r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlals r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
|
|
|
|
printf("CLZ\n");
|
|
TESTCARRY
|
|
TESTINST2("clz r0, r1", 0, r0, r1, c);
|
|
TESTINST2("clz r0, r1", 1, r0, r1, c);
|
|
TESTINST2("clz r0, r1", 0x10, r0, r1, c);
|
|
TESTINST2("clz r0, r1", 0xffffffff, r0, r1, c);
|
|
TESTCARRYEND
|
|
|
|
printf("extend instructions\n");
|
|
TESTINST2("uxtb r0, r1", 0, r0, r1, 0);
|
|
TESTINST2("uxtb r0, r1", 1, r0, r1, 0);
|
|
TESTINST2("uxtb r0, r1", 0xff, r0, r1, 0);
|
|
TESTINST2("uxtb r0, r1", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("sxtb r0, r1", 0, r0, r1, 0);
|
|
TESTINST2("sxtb r0, r1", 1, r0, r1, 0);
|
|
TESTINST2("sxtb r0, r1", 0xff, r0, r1, 0);
|
|
TESTINST2("sxtb r0, r1", 0xffffffff, r0, r1, 0);
|
|
|
|
TESTINST2("uxth r0, r1", 0, r0, r1, 0);
|
|
TESTINST2("uxth r0, r1", 1, r0, r1, 0);
|
|
TESTINST2("uxth r0, r1", 0xffff, r0, r1, 0);
|
|
TESTINST2("uxth r0, r1", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("sxth r0, r1", 0, r0, r1, 0);
|
|
TESTINST2("sxth r0, r1", 1, r0, r1, 0);
|
|
TESTINST2("sxth r0, r1", 0x7fff, r0, r1, 0);
|
|
TESTINST2("sxth r0, r1", 0xffff, r0, r1, 0);
|
|
TESTINST2("sxth r0, r1", 0x10ffff, r0, r1, 0);
|
|
TESTINST2("sxth r0, r1", 0x107fff, r0, r1, 0);
|
|
TESTINST2("sxth r0, r1", 0xffffffff, r0, r1, 0);
|
|
|
|
TESTINST2("uxtb r0, r1, ror #0", 0x000000ff, r0, r1, 0);
|
|
TESTINST2("uxtb r0, r1, ror #8", 0x000000ff, r0, r1, 0);
|
|
TESTINST2("uxtb r0, r1, ror #8", 0x0000ff00, r0, r1, 0);
|
|
TESTINST2("uxtb r0, r1, ror #16", 0x00ff0000, r0, r1, 0);
|
|
TESTINST2("uxtb r0, r1, ror #24", 0xff000000, r0, r1, 0);
|
|
|
|
TESTINST2("uxtb16 r0, r1", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("uxtb16 r0, r1, ror #16", 0x0000ffff, r0, r1, 0);
|
|
TESTINST2("sxtb16 r0, r1", 0xffffffff, r0, r1, 0);
|
|
TESTINST2("sxtb16 r0, r1", 0x00ff00ff, r0, r1, 0);
|
|
TESTINST2("sxtb16 r0, r1", 0x007f007f, r0, r1, 0);
|
|
|
|
printf("------------ BFI ------------\n");
|
|
|
|
/* bfi rDst, rSrc, #lsb-in-dst, #number-of-bits-to-copy */
|
|
TESTINST2("bfi r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
TESTINST2("bfi r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
TESTINST2("bfi r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
|
|
TESTINST2("bfi r0, r1, #19, #11", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("bfi r0, r1, #20, #11", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("bfi r0, r1, #21, #11", 0xFFFFFFFF, r0, r1, 0);
|
|
|
|
TESTINST2("bfi r0, r1, #0, #32", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("bfi r0, r1, #1, #31", 0xFFFFFFFF, r0, r1, 0);
|
|
|
|
TESTINST2("bfi r0, r1, #29, #3", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("bfi r0, r1, #30, #2", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("bfi r0, r1, #31, #1", 0xFFFFFFFF, r0, r1, 0);
|
|
|
|
printf("------------ BFC ------------\n");
|
|
|
|
/* bfi rDst, #lsb-in-dst, #number-of-bits-to-copy */
|
|
TESTINST2("bfc r0, #0, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
TESTINST2("bfc r0, #1, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
TESTINST2("bfc r0, #2, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
|
|
TESTINST2("bfc r0, #19, #11", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("bfc r0, #20, #11", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("bfc r0, #21, #11", 0xFFFFFFFF, r0, r1, 0);
|
|
|
|
TESTINST2("bfc r0, #0, #32", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("bfc r0, #1, #31", 0xFFFFFFFF, r0, r1, 0);
|
|
|
|
TESTINST2("bfc r0, #29, #3", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("bfc r0, #30, #2", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("bfc r0, #31, #1", 0xFFFFFFFF, r0, r1, 0);
|
|
|
|
printf("------------ SBFX ------------\n");
|
|
|
|
/* sbfx rDst, rSrc, #lsb, #width */
|
|
TESTINST2("sbfx r0, r1, #0, #1", 0x00000000, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #0, #1", 0x00000001, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #1, #1", 0x00000000, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #1, #1", 0x00000001, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #1, #1", 0x00000002, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #1, #1", 0x00000003, r0, r1, 0);
|
|
|
|
TESTINST2("sbfx r0, r1, #0, #2", 0x00000000, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #0, #2", 0x00000001, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #1, #2", 0x00000000, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #1, #2", 0x00000001, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #1, #2", 0x00000002, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #1, #2", 0x00000003, r0, r1, 0);
|
|
|
|
TESTINST2("sbfx r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
|
|
TESTINST2("sbfx r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
|
|
TESTINST2("sbfx r0, r1, #31, #1", 0xAAAAAAAA, r0, r1, 0);
|
|
TESTINST2("sbfx r0, r1, #30, #2", 0xAAAAAAAA, r0, r1, 0);
|
|
|
|
printf("------------ UBFX ------------\n");
|
|
|
|
/* ubfx rDst, rSrc, #lsb, #width */
|
|
TESTINST2("ubfx r0, r1, #0, #1", 0x00000000, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #0, #1", 0x00000001, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #1, #1", 0x00000000, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #1, #1", 0x00000001, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #1, #1", 0x00000002, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #1, #1", 0x00000003, r0, r1, 0);
|
|
|
|
TESTINST2("ubfx r0, r1, #0, #2", 0x00000000, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #0, #2", 0x00000001, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #1, #2", 0x00000000, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #1, #2", 0x00000001, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #1, #2", 0x00000002, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #1, #2", 0x00000003, r0, r1, 0);
|
|
|
|
TESTINST2("ubfx r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
|
|
TESTINST2("ubfx r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
|
|
|
|
TESTINST2("ubfx r0, r1, #31, #1", 0xAAAAAAAA, r0, r1, 0);
|
|
TESTINST2("ubfx r0, r1, #30, #2", 0xAAAAAAAA, r0, r1, 0);
|
|
|
|
printf("------------ SMULL{B,T}{B,T} ------------\n");
|
|
/* SMULxx rD, rN, rM */
|
|
|
|
TESTINST3("smulbb r0, r1, r2", 0x00030000, 0x00040000, r0, r1, r2, 0);
|
|
TESTINST3("smulbb r0, r1, r2", 0x00030001, 0x00040002, r0, r1, r2, 0);
|
|
TESTINST3("smulbb r0, r1, r2", 0x00038001, 0x00047fff, r0, r1, r2, 0);
|
|
TESTINST3("smulbb r0, r1, r2", 0x00037fff, 0x00047fff, r0, r1, r2, 0);
|
|
TESTINST3("smulbb r0, r1, r2", 0x0003ffff, 0x0004ffff, r0, r1, r2, 0);
|
|
|
|
printf("------------ SXTAB ------------\n");
|
|
TESTINST3("sxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
|
|
TESTINST3("sxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182899,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182899,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182899,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182899,
|
|
r0, r1, r2, 0);
|
|
|
|
printf("------------ UXTAB ------------\n");
|
|
TESTINST3("uxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
|
|
TESTINST3("uxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182899,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182899,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182899,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182899,
|
|
r0, r1, r2, 0);
|
|
|
|
printf("------------ SXTAH ------------\n");
|
|
TESTINST3("sxtah r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtah r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
|
|
TESTINST3("sxtah r0, r1, r2, ROR #24", 0x31415927, 0x27189819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtah r0, r1, r2, ROR #16", 0x31415927, 0x27189819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27189819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("sxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27189819,
|
|
r0, r1, r2, 0);
|
|
|
|
printf("------------ UXTAH ------------\n");
|
|
TESTINST3("uxtah r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtah r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27182819,
|
|
r0, r1, r2, 0);
|
|
|
|
TESTINST3("uxtah r0, r1, r2, ROR #24", 0x31415927, 0x27189819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtah r0, r1, r2, ROR #16", 0x31415927, 0x27189819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27189819,
|
|
r0, r1, r2, 0);
|
|
TESTINST3("uxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27189819,
|
|
r0, r1, r2, 0);
|
|
|
|
printf("------------ PLD/PLDW (begin) ------------\n");
|
|
/* These don't have any effect on the architected state, so,
|
|
uh, there's no result values to check. Just _do_ some of
|
|
them and check Valgrind's instruction decoder eats them up
|
|
without complaining. */
|
|
{ int alocal;
|
|
printf("pld reg +/- imm12 cases\n");
|
|
__asm__ __volatile__( "pld [%0, #128]" : :/*in*/"r"(&alocal) );
|
|
__asm__ __volatile__( "pld [%0, #-128]" : :/*in*/"r"(&alocal) );
|
|
__asm__ __volatile__( "pld [r15, #-128]" : :/*in*/"r"(&alocal) );
|
|
|
|
// apparently pldw is v7 only
|
|
//__asm__ __volatile__( "pldw [%0, #128]" : :/*in*/"r"(&alocal) );
|
|
//__asm__ __volatile__( "pldw [%0, #-128]" : :/*in*/"r"(&alocal) );
|
|
//__asm__ __volatile__( "pldw [r15, #128]" : :/*in*/"r"(&alocal) );
|
|
|
|
printf("pld reg +/- shifted reg cases\n");
|
|
__asm__ __volatile__( "pld [%0, %1]" : : /*in*/"r"(&alocal), "r"(0) );
|
|
__asm__ __volatile__( "pld [%0, %1, LSL #1]" : : /*in*/"r"(&alocal), "r"(0) );
|
|
__asm__ __volatile__( "pld [%0, %1, LSR #1]" : : /*in*/"r"(&alocal), "r"(0) );
|
|
__asm__ __volatile__( "pld [%0, %1, ASR #1]" : : /*in*/"r"(&alocal), "r"(0) );
|
|
__asm__ __volatile__( "pld [%0, %1, ROR #1]" : : /*in*/"r"(&alocal), "r"(0) );
|
|
__asm__ __volatile__( "pld [%0, %1, RRX]" : : /*in*/"r"(&alocal), "r"(0) );
|
|
}
|
|
printf("------------ PLD/PLDW (done) ------------\n");
|
|
|
|
printf("------------ RBIT ------------\n");
|
|
TESTINST2("rbit r0, r1", 0x00000000, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0x80000000, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0x00000001, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0x31415927, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0x14141562, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0xabe8391f, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0x9028aa80, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0xead1fc6d, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0x35c98c55, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0x534af1eb, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0x45511b08, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0x90077f71, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0xde8ca84b, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0xe37a0dda, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0xe5b83d4b, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0xbb6d14ec, r0, r1, 0);
|
|
TESTINST2("rbit r0, r1", 0x68983cc9, r0, r1, 0);
|
|
|
|
printf("------------ REV ------------\n");
|
|
TESTINST2("rev r0, r1", 0x00000000, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0x80000000, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0x00000001, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0x31415927, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0x14141562, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0xabe8391f, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0x9028aa80, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0xead1fc6d, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0x35c98c55, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0x534af1eb, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0x45511b08, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0x90077f71, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0xde8ca84b, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0xe37a0dda, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0xe5b83d4b, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0xbb6d14ec, r0, r1, 0);
|
|
TESTINST2("rev r0, r1", 0x68983cc9, r0, r1, 0);
|
|
|
|
printf("------------ REV16 ------------\n");
|
|
TESTINST2("rev16 r0, r1", 0x00000000, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0x80000000, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0x00000001, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0x31415927, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0x14141562, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0xabe8391f, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0x9028aa80, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0xead1fc6d, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0x35c98c55, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0x534af1eb, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0x45511b08, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0x90077f71, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0xde8ca84b, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0xe37a0dda, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0xe5b83d4b, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0xbb6d14ec, r0, r1, 0);
|
|
TESTINST2("rev16 r0, r1", 0x68983cc9, r0, r1, 0);
|
|
|
|
printf("------------ REVSH ------------\n");
|
|
TESTINST2("revsh r0, r1", 0x00000000, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0xFFFFFFFF, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0x80000000, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0x00000001, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0x31415927, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0x14141562, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0xabe8391f, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0x9028aa80, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0xead1fc6d, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0x35c98c55, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0x534af1eb, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0x45511b08, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0x90077f71, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0xde8ca84b, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0xe37a0dda, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0xe5b83d4b, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0xbb6d14ec, r0, r1, 0);
|
|
TESTINST2("revsh r0, r1", 0x68983cc9, r0, r1, 0);
|
|
|
|
printf("------------ NOP (begin) ------------\n");
|
|
printf("nop\n");
|
|
__asm__ __volatile__("nop" ::: "memory","cc");
|
|
printf("nopeq\n");
|
|
__asm__ __volatile__("nopeq" ::: "memory","cc");
|
|
printf("nopne\n");
|
|
__asm__ __volatile__("nopne" ::: "memory","cc");
|
|
printf("------------ NOP (end) ------------\n");
|
|
|
|
printf("------------ SMMUL ------------\n");
|
|
TESTINST3("smmul r0, r1, r2", 0, 0, r0, r1, r2, 0);
|
|
TESTINST3("smmul r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
|
|
TESTINST3("smmul r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
|
|
TESTINST3("smmul r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
|
|
TESTINST3("smmul r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
|
|
TESTINST3("smmul r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
|
|
TESTINST3("smmul r0, r1, r2", 0xe444dc25, 0xd5eef620, r0, r1, r2, 0);
|
|
TESTINST3("smmul r0, r1, r2", 0x06ea9b2a, 0xa2108661, r0, r1, r2, 0);
|
|
TESTINST3("smmul r0, r1, r2", 0x448f3a5f, 0x17aecf57, r0, r1, r2, 0);
|
|
TESTINST3("smmul r0, r1, r2", 0x4b0c2337, 0xffa63d6c, r0, r1, r2, 0);
|
|
TESTINST3("smmul r0, r1, r2", 0xf91d5f56, 0x088bc0f9, r0, r1, r2, 0);
|
|
|
|
TESTINST3("smmulr r0, r1, r2", 0, 0, r0, r1, r2, 0);
|
|
TESTINST3("smmulr r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
|
|
TESTINST3("smmulr r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
|
|
TESTINST3("smmulr r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
|
|
TESTINST3("smmulr r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
|
|
TESTINST3("smmulr r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
|
|
TESTINST3("smmulr r0, r1, r2", 0xe444dc25, 0xd5eef620, r0, r1, r2, 0);
|
|
TESTINST3("smmulr r0, r1, r2", 0x06ea9b2a, 0xa2108661, r0, r1, r2, 0);
|
|
TESTINST3("smmulr r0, r1, r2", 0x448f3a5f, 0x17aecf57, r0, r1, r2, 0);
|
|
TESTINST3("smmulr r0, r1, r2", 0x4b0c2337, 0xffa63d6c, r0, r1, r2, 0);
|
|
TESTINST3("smmulr r0, r1, r2", 0xf91d5f56, 0x088bc0f9, r0, r1, r2, 0);
|
|
|
|
printf("------------ UMAAL ------------\n");
|
|
TESTINST4_2OUT("umaal r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umaal r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umaal r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umaal r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umaal r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umaal r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umaal r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umaal r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umaal r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
|
|
|
|
TESTINST4_2OUT("umaal r0, r1, r2, r3", 0x27182846, 0x31415927, 0x14141356, 0x1773250A,
|
|
r0, r1, r2, r3, 0);
|
|
TESTINST4_2OUT("umaal r0, r1, r2, r3", 0x01415927, 0x74141356, 0x5773250A, 0xA7182846,
|
|
r0, r1, r2, r3, 1);
|
|
|
|
printf("----------------- SMMLA{R} ----------------- \n");
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x80008000, 0x80008000, 0x00000000, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x7fff7fff, 0x00000000, 0x00000000, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x7fff7fff, 0x00010001, 0x00000001, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x80008000, 0xffffffff, 0x0000001f, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x00640064, 0x00030003, 0x00000020, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xffffffff, 0xfffc0001, 0x000000ff, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xfff70fff, 0x00030003, 0x00000100, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xb8035b5b, 0xce0ce1ed, 0x5f986e68, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x35232047, 0x146275d8, 0xaae3433f, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xe7aa57b4, 0x1584bd74, 0x2c07a5b4, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x32fa0095, 0x36f26261, 0x89d2ef86, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x8ed8287c, 0x02c90120, 0xd4b64d54, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xc53aaba9, 0x29300837, 0x0b02c58a, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x216158cb, 0x57a50a01, 0xb0d20777, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x3e2e1bd7, 0x3cd6cd94, 0x7e376198, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xd5fe2dc4, 0xdd914bf7, 0xd5dc5407, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xf87b961e, 0x1d66879f, 0xf2b64835, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xd65db979, 0xc61b323b, 0xae930a1a, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x5ef1f1a8, 0xbf73f0a5, 0x2fb714c9, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x1ffe53d9, 0x815bb75b, 0xa3268abe, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xed2cbf78, 0xc6ffabb6, 0xef9e9fd9, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xeaa652c7, 0x137741f4, 0x3dba1164, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x3ada0280, 0x71fbde8b, 0xdba5bd25, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xda4ba05b, 0x90f9833d, 0x884c0ad8, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xc00b821a, 0x7fa1d5a6, 0x9a4ff1b8, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xe1bb8606, 0x58293969, 0x81616d13, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x51f31d95, 0xa3cfd624, 0x6077fb1f, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x0849a0c2, 0x0872f25a, 0x40b094e2, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x17913309, 0xf1e03d7e, 0x91edc21d, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x5388b5cd, 0x86582032, 0x6034078d, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x181c436b, 0x5de41558, 0xccfa1c7e, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x23ba1b46, 0x4437983c, 0x48d06549, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xa9085781, 0xc6b4ac58, 0xb2aead21, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xc2bdf597, 0xdde1e6a4, 0x852e3a72, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x157b0dea, 0xf0d5ff94, 0xe7b87e39, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x3edad6b6, 0x82aceb7a, 0x0557c6fc, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x6cc9bfa8, 0x7f808c15, 0x81874a02, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x6b1422c7, 0x33921b00, 0x3ccad3f7, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xd7ce1909, 0x3e435701, 0x85fbf196, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xb4e16b6e, 0x6e13680a, 0x89436f88, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x44858efc, 0x9002bc30, 0x390d2c2f, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xbea121ab, 0x953ff6ec, 0x80657c40, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x6ffed89f, 0x3e8c49b7, 0x11bd07d1, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x7795635d, 0x5e6e32dd, 0xe4999bf2, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xec0c2f30, 0x5736ed46, 0x231348c0, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x4f9ddd1b, 0x95bca5d8, 0x5765b203, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xc1553709, 0x0112b30a, 0x69ec0212, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x74bd0223, 0x03fa9bb5, 0x899d9192, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xf52e9fbf, 0xb4c510a7, 0x7fcbe5a9, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x64a365ef, 0x2dd01366, 0xf7b0b13e, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x5e4b1cbf, 0x44de5ca9, 0x464a21cc, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x299da970, 0xe8108f1b, 0xf5818cfb, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xcd90d604, 0xaa5e9444, 0x8217b7df, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xe60743c3, 0x7acb4de3, 0x73c29060, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x868e7c7d, 0x5f77532e, 0x1d133d3d, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0x4e5e0760, 0x8f6d3264, 0x21ba2fb3, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xde99ac2f, 0x0be36f70, 0xeda5110c, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmla r0, r1, r2, r3",
|
|
0xc57243b7, 0xcf1e4487, 0xf20fb90f, r0, r1, r2, r3, 0);
|
|
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x80008000, 0x80008000, 0x00000000, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x7fff7fff, 0x00000000, 0x00000000, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x7fff7fff, 0x00010001, 0x00000001, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x80008000, 0xffffffff, 0x0000001f, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x00640064, 0x00030003, 0x00000020, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xffffffff, 0xfffc0001, 0x000000ff, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xfff70fff, 0x00030003, 0x00000100, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xb8035b5b, 0xce0ce1ed, 0x5f986e68, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x35232047, 0x146275d8, 0xaae3433f, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xe7aa57b4, 0x1584bd74, 0x2c07a5b4, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x32fa0095, 0x36f26261, 0x89d2ef86, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x8ed8287c, 0x02c90120, 0xd4b64d54, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xc53aaba9, 0x29300837, 0x0b02c58a, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x216158cb, 0x57a50a01, 0xb0d20777, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x3e2e1bd7, 0x3cd6cd94, 0x7e376198, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xd5fe2dc4, 0xdd914bf7, 0xd5dc5407, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xf87b961e, 0x1d66879f, 0xf2b64835, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xd65db979, 0xc61b323b, 0xae930a1a, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x5ef1f1a8, 0xbf73f0a5, 0x2fb714c9, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x1ffe53d9, 0x815bb75b, 0xa3268abe, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xed2cbf78, 0xc6ffabb6, 0xef9e9fd9, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xeaa652c7, 0x137741f4, 0x3dba1164, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x3ada0280, 0x71fbde8b, 0xdba5bd25, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xda4ba05b, 0x90f9833d, 0x884c0ad8, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xc00b821a, 0x7fa1d5a6, 0x9a4ff1b8, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xe1bb8606, 0x58293969, 0x81616d13, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x51f31d95, 0xa3cfd624, 0x6077fb1f, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x0849a0c2, 0x0872f25a, 0x40b094e2, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x17913309, 0xf1e03d7e, 0x91edc21d, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x5388b5cd, 0x86582032, 0x6034078d, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x181c436b, 0x5de41558, 0xccfa1c7e, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x23ba1b46, 0x4437983c, 0x48d06549, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xa9085781, 0xc6b4ac58, 0xb2aead21, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xc2bdf597, 0xdde1e6a4, 0x852e3a72, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x157b0dea, 0xf0d5ff94, 0xe7b87e39, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x3edad6b6, 0x82aceb7a, 0x0557c6fc, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x6cc9bfa8, 0x7f808c15, 0x81874a02, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x6b1422c7, 0x33921b00, 0x3ccad3f7, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xd7ce1909, 0x3e435701, 0x85fbf196, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xb4e16b6e, 0x6e13680a, 0x89436f88, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x44858efc, 0x9002bc30, 0x390d2c2f, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xbea121ab, 0x953ff6ec, 0x80657c40, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x6ffed89f, 0x3e8c49b7, 0x11bd07d1, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x7795635d, 0x5e6e32dd, 0xe4999bf2, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xec0c2f30, 0x5736ed46, 0x231348c0, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x4f9ddd1b, 0x95bca5d8, 0x5765b203, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xc1553709, 0x0112b30a, 0x69ec0212, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x74bd0223, 0x03fa9bb5, 0x899d9192, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xf52e9fbf, 0xb4c510a7, 0x7fcbe5a9, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x64a365ef, 0x2dd01366, 0xf7b0b13e, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x5e4b1cbf, 0x44de5ca9, 0x464a21cc, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x299da970, 0xe8108f1b, 0xf5818cfb, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xcd90d604, 0xaa5e9444, 0x8217b7df, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xe60743c3, 0x7acb4de3, 0x73c29060, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x868e7c7d, 0x5f77532e, 0x1d133d3d, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0x4e5e0760, 0x8f6d3264, 0x21ba2fb3, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xde99ac2f, 0x0be36f70, 0xeda5110c, r0, r1, r2, r3, 0);
|
|
TESTINST4("smmlar r0, r1, r2, r3",
|
|
0xc57243b7, 0xcf1e4487, 0xf20fb90f, r0, r1, r2, r3, 0);
|
|
|
|
return 0;
|
|
}
|