RPA Toolkit
added pair type to the RVM and fixed EADD tests
[rpatk.git] / tests / common.h
1 #include "rvmcpu.h"
2 #include <stdio.h>
3
4 //#define EXECDEBUG 1
5
6
7 #define VMTEST_REG(code, index, reg, val, msg) \
8         do { code[index++] = rvm_asm(RVM_MOV, R8, DA, XX, reg); \
9                  code[index++] = rvm_asm(RVM_MOV, R9, DA, XX, val); \
10                  code[index++] = rvm_asm(RVM_PRN, reg, XX, XX, 0); \
11                  code[index++] = rvm_asmp(RVM_MOV, R10, DA, XX, msg); \
12                  code[index++] = rvm_asm(RVM_OPSWI(rvm_cpu_getswi_s(vm, "rvm_vmtest_check_reg")), XX, XX, R0, 0); \
13                  code[index++] = rvm_asm(RVM_NOP, XX, XX, XX, 0); } while (0)
14
15 #define VMTEST_REGL(code, index, reg, val, msg) \
16         do { code[index++] = rvm_asm(RVM_MOV, R8, DA, XX, reg); \
17                  code[index++] = rvm_asml(RVM_MOV, R9, DA, XX, val); \
18                  code[index++] = rvm_asm(RVM_PRN, reg, XX, XX, 0); \
19                  code[index++] = rvm_asmp(RVM_MOV, R10, DA, XX, msg); \
20                  code[index++] = rvm_asm(RVM_OPSWI(rvm_cpu_getswi_s(vm, "rvm_vmtest_check_reg")), XX, XX, R0, 0); \
21                  code[index++] = rvm_asm(RVM_NOP, XX, XX, XX, 0); } while (0)
22
23 #define VMTEST_REGD(code, index, reg, val, msg) \
24         do { code[index++] = rvm_asm(RVM_MOV, R8, DA, XX, reg); \
25                  code[index++] = rvm_asmd(RVM_MOV, R9, DA, XX, val); \
26                  code[index++] = rvm_asm(RVM_PRN, reg, XX, XX, 0); \
27                  code[index++] = rvm_asmp(RVM_MOV, R10, DA, XX, msg); \
28                  code[index++] = rvm_asm(RVM_OPSWI(rvm_cpu_getswi_s(vm, "rvm_vmtest_check_reg")), XX, XX, R0, 0); \
29                  code[index++] = rvm_asm(RVM_NOP, XX, XX, XX, 0); } while (0)
30
31
32 #define VMTEST_REGP(code, index, reg, pval, msg) \
33         do { code[index++] = rvm_asm(RVM_MOV, R8, DA, XX, reg); \
34                  code[index++] = rvm_asmp(RVM_LDRR, R9, DA, XX, pval); \
35                  code[index++] = rvm_asm(RVM_PRN, R9, XX, XX, 0); \
36                  code[index++] = rvm_asmp(RVM_MOV, R10, DA, XX, msg); \
37                  code[index++] = rvm_asm(RVM_OPSWI(rvm_cpu_getswi_s(vm, "rvm_vmtest_check_reg")), XX, XX, R0, 0); \
38                  code[index++] = rvm_asm(RVM_NOP, XX, XX, XX, 0); } while (0)
39
40
41 #define VMTEST_STATUS(code, index, val, msg) \
42         do { code[index++] = rvm_asm(RVM_MOV, R9, DA, XX, val); \
43                  code[index++] = rvm_asmp(RVM_MOV, R10, DA, XX, msg); \
44                  code[index++] = rvm_asm(RVM_OPSWI(rvm_cpu_getswi_s(vm, "rvm_vmtest_check_status")), XX, XX, R0, 0); \
45                  code[index++] = rvm_asm(RVM_NOP, XX, XX, XX, 0); } while (0)
46
47
48 /*
49  * R10 - (const char*) msg
50  * R9 - argument (to compare)
51  * R8 - (0 : 7) Register to check
52  */
53 static void rvm_vmtest_check_reg(rvmcpu_t *vm, rvm_asmins_t *ins)
54 {
55         fprintf(stdout, "%s: %s\n", (const char*)RVM_CPUREG_GETU(vm, 10), RVM_CPUREG_GETU(vm, RVM_CPUREG_GETU(vm, 8)) == RVM_CPUREG_GETU(vm, 9) ? "PASSED" : "FAILED");
56 }
57
58
59 /*
60  * R10 - (const char*) msg
61  * R9 - argument (to compare the status register)
62  */
63 static void rvm_vmtest_check_status(rvmcpu_t *vm, rvm_asmins_t *ins)
64 {
65         fprintf(stdout, "%s: %s\n", (const char*)RVM_CPUREG_GETU(vm, 10), vm->status == RVM_CPUREG_GETU(vm, 9) ? "PASSED" : "FAILED");
66 }
67
68
69 static rvm_switable_t common_calltable[] = {
70         {"rvm_vmtest_check_reg", rvm_vmtest_check_reg},
71         {"rvm_vmtest_check_status", rvm_vmtest_check_status},
72         {NULL, NULL},
73 };