10 #include "rpacompiler.h"
15 void code_rpa_matchrng(rpa_compiler_t *co, rpastat_t *stat)
17 rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
18 rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_NAN, DA, XX, XX, 'a', 'b'));
19 VMTEST_REG(co->cg, 0, 1, "RPA_MATCHRNG_NAN 'a-b'");
20 VMTEST_STATUS(co->cg, 0, "RPA_MATCHRNG_NAN STATUS");
22 rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
23 rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_NAN, DA, XX, XX, 'c', 'd'));
24 VMTEST_REG(co->cg, 0, -1, "RPA_MATCHRNG_NAN 'c-d'");
25 VMTEST_STATUS(co->cg, RVM_STATUS_N, "RPA_MATCHRNG_NAN STATUS");
27 rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
28 rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_OPT, DA, XX, XX, 'a', 'b'));
29 VMTEST_REG(co->cg, 0, 1, "RPA_MATCHRNG_OPT 'a-b'");
30 VMTEST_STATUS(co->cg, 0, "RPA_MATCHRNG_OPT STATUS");
32 rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
33 rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_OPT, DA, XX, XX, 'c', 'd'));
34 VMTEST_REG(co->cg, 0, 0, "RPA_MATCHRNG_OPT 'c-d'");
35 VMTEST_STATUS(co->cg, RVM_STATUS_Z, "RPA_MATCHRNG_OPT STATUS");
37 rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
38 rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_MOP, DA, XX, XX, 'a', 'b'));
39 VMTEST_REG(co->cg, 0, 3, "RPA_MATCHRNG_MOP 'a-b'");
40 VMTEST_STATUS(co->cg, 0, "RPA_MATCHRNG_MOP STATUS");
42 rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
43 rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_MOP, DA, XX, XX, 'c', 'd'));
44 VMTEST_REG(co->cg, 0, 0, "RPA_MATCHRNG_MOP 'c-d'");
45 VMTEST_STATUS(co->cg, RVM_STATUS_Z, "RPA_MATCHRNG_MOP STATUS");
47 rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
48 rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_MUL, DA, XX, XX, 'a', 'b'));
49 VMTEST_REG(co->cg, 0, 3, "RPA_MATCHRNG_MUL 'a-b'");
50 VMTEST_STATUS(co->cg, 0, "RPA_MATCHRNG_MUL STATUS");
52 rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
53 rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_MUL, DA, XX, XX, 'c', 'd'));
54 VMTEST_REG(co->cg, 0, -1, "RPA_MATCHRNG_MUL 'c-d'");
55 VMTEST_STATUS(co->cg, RVM_STATUS_N, "RPA_MATCHRNG_MUL STATUS");
59 int main(int argc, char *argv[])
64 char teststr[] = "abaaa";
66 co = rpa_compiler_create();
67 stat = rpa_stat_create(NULL, 4096);
68 rvm_cpu_addswitable(stat->cpu, "common_table", common_calltable);
70 rpa_stat_init(stat, teststr, teststr, teststr+3);
72 mainoff = rvm_codegen_addins(co->cg, rvm_asml(RVM_NOP, XX, XX, XX, -1));
73 rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, R_TOP, DA, XX, -1));
74 rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
75 rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
77 rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
78 code_rpa_matchrng(co, stat);
79 rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
80 rvm_codegen_addins(co->cg, rvm_asm(RVM_EXT, XX, XX, XX, 0));
82 rvm_cpu_exec(stat->cpu, rvm_codegen_getcode(co->cg, 0), mainoff);
84 rpa_stat_destroy(stat);
85 rpa_compiler_destroy(co);
88 r_printf("Max alloc mem: %ld\n", r_debug_get_maxmem());
89 r_printf("Leaked mem: %ld\n", r_debug_get_allocmem());