RPA Toolkit
Moving away from RPA_BXL... 3
[rpatk.git] / testrpa2 / rpavm-matchrng.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/types.h>
4 #include <sys/stat.h>
5 #include <sys/types.h>
6 #include <fcntl.h>
7 #include <unistd.h>
8 #include <sys/mman.h>
9 #include "rmem.h"
10 #include "rpacompiler.h"
11 #include "rpastat.h"
12 #include "common.h"
13
14
15 void code_rpa_matchrng(rpa_compiler_t *co, rpastat_t *stat)
16 {
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");
21
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");
26
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");
31
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");
36
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");
41
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");
46
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");
51
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");
56 }
57
58
59 int main(int argc, char *argv[])
60 {
61         rpa_compiler_t *co;
62         rpastat_t *stat;
63         ruint mainoff;
64         char teststr[] = "abaaa";
65
66         co = rpa_compiler_create();
67         stat = rpa_stat_create(NULL, 4096);
68         rvm_cpu_addswitable(stat->cpu, "common_table", common_calltable);
69
70         rpa_stat_init(stat, teststr, teststr, teststr+3);
71
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));
76
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));
81
82         rvm_cpu_exec(stat->cpu, rvm_codegen_getcode(co->cg, 0), mainoff);
83
84         rpa_stat_destroy(stat);
85         rpa_compiler_destroy(co);
86
87
88         r_printf("Max alloc mem: %ld\n", r_debug_get_maxmem());
89         r_printf("Leaked mem: %ld\n", r_debug_get_allocmem());
90         return 0;
91 }