RPA Toolkit
Moving away from RPA_BXL... 3
authorMartin Stoilov <martin@rpasearch.com>
Wed, 6 Apr 2011 06:03:44 +0000 (23:03 -0700)
committerMartin Stoilov <martin@rpasearch.com>
Wed, 6 Apr 2011 06:03:44 +0000 (23:03 -0700)
14 files changed:
testrpa2/rpacompiler-altexp.c
testrpa2/rpacompiler-class.c
testrpa2/rpacompiler-exp.c
testrpa2/rpacompiler-minusexp.c
testrpa2/rpacompiler-notexp.c
testrpa2/rpacompiler-rule.c
testrpa2/rpacompiler-rulealtrec.c
testrpa2/rpacompiler-ruleloop.c
testrpa2/rpacompiler-ruleloopcls.c
testrpa2/rpacompiler-rulerec.c
testrpa2/rpavm-matchchr.c
testrpa2/rpavm-matchrng.c
testrpa2/rpavm-mnode.c
tests/rpavm-test.c

index 150927e..9ea1b72 100644 (file)
@@ -89,11 +89,6 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
        code_rpa_matchaltexp(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
index 4957fe8..cced592 100644 (file)
@@ -135,11 +135,6 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
        code_rpa_matchclass(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
index 1ece701..0ec5a69 100644 (file)
@@ -158,11 +158,6 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
        code_rpa_matchexp(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
index e188fd5..ef8f148 100644 (file)
@@ -98,11 +98,6 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
        code_rpa_matchminusexp(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
index 3fc7704..f86b4ac 100644 (file)
@@ -158,11 +158,6 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
        code_rpa_matchexp(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
index 3685b7c..fcc9306 100644 (file)
@@ -42,49 +42,49 @@ void code_rpa_matchmnode(rpa_compiler_t *co, rpastat_t *stat)
 {
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchabc", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co,"rpa_matchabc");
        VMTEST_REG(co->cg, 0, 3, "RPA_MNODE_NAN 'abc'");
        VMTEST_STATUS(co->cg, 0, "RPA_MNODE_NAN STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchxyz", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co,"rpa_matchxyz");
        VMTEST_REG(co->cg, 0, -1, "RPA_MNODE_NAN 'xyz'");
        VMTEST_STATUS(co->cg, RVM_STATUS_N, "RPA_MNODE_NAN STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchabc", rvm_asm(RPA_BXLOPT, DA, XX, XX, 0));
+       rpa_compiler_reference_opt_s(co,"rpa_matchabc");
        VMTEST_REG(co->cg, 0, 3, "RPA_MNODE_OPT 'abc'");
        VMTEST_STATUS(co->cg, 0, "RPA_MNODE_OPT STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchxyz", rvm_asm(RPA_BXLOPT, DA, XX, XX, 0));
+       rpa_compiler_reference_opt_s(co,"rpa_matchxyz");
        VMTEST_REG(co->cg, 0, 0, "RPA_MNODE_OPT 'xyz'");
        VMTEST_STATUS(co->cg, RVM_STATUS_Z, "RPA_MNODE_OPT STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchabc", rvm_asm(RPA_BXLMUL, DA, XX, XX, 0));
+       rpa_compiler_reference_mul_s(co,"rpa_matchabc");
        VMTEST_REG(co->cg, 0, 12, "RPA_MNODE_MUL 'abc'");
        VMTEST_STATUS(co->cg, 0, "RPA_MNODE_MUL STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchxyz", rvm_asm(RPA_BXLMUL, DA, XX, XX, 0));
+       rpa_compiler_reference_mul_s(co,"rpa_matchxyz");
        VMTEST_REG(co->cg, 0, -1, "RPA_MNODE_MUL 'xyz'");
        VMTEST_STATUS(co->cg, RVM_STATUS_N, "RPA_MNODE_MUL STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchabc", rvm_asm(RPA_BXLMOP, DA, XX, XX, 0));
+       rpa_compiler_reference_mop_s(co,"rpa_matchabc");
        VMTEST_REG(co->cg, 0, 12, "RPA_MNODE_MOP 'abc'");
        VMTEST_STATUS(co->cg, 0, "RPA_MNODE_MOP STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchxyz", rvm_asm(RPA_BXLMOP, DA, XX, XX, 0));
+       rpa_compiler_reference_mop_s(co,"rpa_matchxyz");
        VMTEST_REG(co->cg, 0, 0, "RPA_MNODE_MOP 'xyz'");
        VMTEST_STATUS(co->cg, RVM_STATUS_Z, "RPA_MNODE_MOP STATUS");
 
@@ -110,13 +110,8 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, R_TOP, DA, XX, -1));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
-
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
+
        code_rpa_matchmnode(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_EXT, XX, XX, XX, 0));
index fa3b332..baab202 100644 (file)
@@ -32,7 +32,7 @@ void code_rpa_match_loopnum(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_altexp_begin(co);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_loopnum", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_loopnum");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rpa_compiler_class_begin(co);
@@ -65,38 +65,38 @@ void code_rpa_match_mathop(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_altexp_begin(co);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_num", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '*'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_num", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_num", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '/'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_num", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_num", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '+'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_num", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_num", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '-'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_num", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
@@ -114,7 +114,7 @@ void code_rpa_matchmnode(rpa_compiler_t *co, rpastat_t *stat)
 
        rpa_compiler_exp_begin(co);
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_mathop", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_mathop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rpa_compiler_exp_end(co, RPA_MATCH_NONE);
@@ -141,17 +141,11 @@ int main(int argc, char *argv[])
        rpa_stat_init(stat, teststr, teststr, teststr+30);
 
        mainoff = rvm_codegen_addins(co->cg, rvm_asml(RVM_NOP, XX, XX, XX, -1));
-
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, R_TOP, DA, XX, -1));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
-
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
+
        code_rpa_matchmnode(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_EXT, XX, XX, XX, 0));
index 7819f63..8d77321 100644 (file)
@@ -19,7 +19,7 @@ void code_rpa_match_aloop(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_altexp_begin(co);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_aloop", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_aloop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'a'));
@@ -51,7 +51,7 @@ void code_rpa_match_xloop(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_altexp_begin(co);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_xloop", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_xloop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'X'));
@@ -63,13 +63,13 @@ void code_rpa_match_xloop(rpa_compiler_t *co, rpastat_t *stat)
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'X'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_aloop", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_aloop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
 
        rpa_compiler_nonloopybranch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_aloop", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_aloop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_nonloopybranch_end(co, RPA_MATCH_NONE);
 
@@ -90,7 +90,7 @@ void code_rpa_matchmnode(rpa_compiler_t *co, rpastat_t *stat)
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'Z'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_xloop", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_xloop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'Z'));
@@ -130,11 +130,6 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
        code_rpa_matchmnode(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
index 36e4f64..88e00a8 100644 (file)
@@ -57,12 +57,12 @@ void code_rpa_match_term(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_altexp_begin(co);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_num", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_var", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_var");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
@@ -70,7 +70,7 @@ void code_rpa_match_term(rpa_compiler_t *co, rpastat_t *stat)
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '('));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_xorexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_xorexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, ')'));
@@ -89,7 +89,7 @@ void code_rpa_match_mulop(rpa_compiler_t *co, rpastat_t *stat)
 {
        rpa_compiler_rule_begin_s(co, "rpa_match_mulop");
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_mulexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_mulexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rpa_compiler_class_begin(co);
@@ -98,7 +98,7 @@ void code_rpa_match_mulop(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_class_end(co, RPA_MATCH_NONE);
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_term", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_term");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rpa_compiler_rule_end(co);
@@ -109,7 +109,7 @@ void code_rpa_match_divop(rpa_compiler_t *co, rpastat_t *stat)
 {
        rpa_compiler_rule_begin_s(co, "rpa_match_divop");
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_mulexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_mulexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rpa_compiler_class_begin(co);
@@ -118,7 +118,7 @@ void code_rpa_match_divop(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_class_end(co, RPA_MATCH_NONE);
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_term", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_term");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rpa_compiler_rule_end(co);
@@ -132,18 +132,18 @@ void code_rpa_match_mulexp(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_altexp_begin(co);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_mulop", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_mulop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_divop", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_divop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
 
        rpa_compiler_nonloopybranch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_term", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_term");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_nonloopybranch_end(co, RPA_MATCH_NONE);
 
@@ -158,31 +158,31 @@ void code_rpa_match_addexp(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_altexp_begin(co);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_addexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_addexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '-'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_mulexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_mulexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_addexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_addexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '+'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_mulexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_mulexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
 
        rpa_compiler_nonloopybranch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_mulexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_mulexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_nonloopybranch_end(co, RPA_MATCH_NONE);
 
@@ -197,18 +197,18 @@ void code_rpa_match_orexp(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_altexp_begin(co);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_orexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_orexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '|'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_addexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_addexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
        rpa_compiler_nonloopybranch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_addexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_addexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_nonloopybranch_end(co, RPA_MATCH_NONE);
 
@@ -223,18 +223,18 @@ void code_rpa_match_andexp(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_altexp_begin(co);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_andexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_andexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '&'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_orexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_orexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
        rpa_compiler_nonloopybranch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_orexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_orexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_nonloopybranch_end(co, RPA_MATCH_NONE);
 
@@ -249,18 +249,18 @@ void code_rpa_match_xorexp(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_altexp_begin(co);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_xorexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_xorexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '^'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_andexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_andexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
        rpa_compiler_nonloopybranch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_andexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_andexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_nonloopybranch_end(co, RPA_MATCH_NONE);
 
@@ -275,7 +275,7 @@ void code_rpa_matchmnode(rpa_compiler_t *co, rpastat_t *stat)
 
        rpa_compiler_exp_begin(co);
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_xorexp", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_match_xorexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rpa_compiler_exp_end(co, RPA_MATCH_NONE);
@@ -306,11 +306,6 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
        code_rpa_matchmnode(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
index 274849a..ef06766 100644 (file)
@@ -44,12 +44,12 @@ void code_rpa_match_abcorxyz(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_rule_begin_s(co, "rpa_match_abcorxyz");
        rpa_compiler_altexp_begin(co);
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchxyz", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_matchxyz");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
        rpa_compiler_branch_begin(co);
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchabc", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_matchabc");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co, RPA_MATCH_NONE);
 
@@ -61,7 +61,7 @@ void code_rpa_match_abcorxyz(rpa_compiler_t *co, rpastat_t *stat)
 void code_rpa_matchmnode(rpa_compiler_t *co, rpastat_t *stat)
 {
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_abcorxyz", rvm_asm(RPA_BXLMUL, DA, XX, XX, 0));
+       rpa_compiler_reference_mul_s(co, "rpa_match_abcorxyz");
        VMTEST_REG(co->cg, 0, 12, "RPA_MNODE_MUL 'abcorxyz'");
        VMTEST_STATUS(co->cg, 0, "RPA_MNODE_MUL STATUS");
 }
@@ -86,13 +86,8 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, R_TOP, DA, XX, -1));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
-
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
+
        code_rpa_matchmnode(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_EXT, XX, XX, XX, 0));
index a0d80bb..72cf1a9 100644 (file)
@@ -76,10 +76,6 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
        code_rpa_matchchr(co, stat);
index 6125a71..a36f37f 100644 (file)
@@ -74,11 +74,6 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
        code_rpa_matchrng(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
index fe75381..458b474 100644 (file)
@@ -75,43 +75,42 @@ void code_rpa_matchxyz(rpa_compiler_t *co, rpastat_t *stat)
 void code_rpa_matchmnode(rpa_compiler_t *co, rpastat_t *stat)
 {
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchabc", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_matchabc");
        VMTEST_REG(co->cg, 0, 3, "RPA_MNODE_NAN 'abc'");
        VMTEST_STATUS(co->cg, 0, "RPA_MNODE_NAN STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchxyz", rvm_asm(RPA_BXLNAN, DA, XX, XX, 0));
+       rpa_compiler_reference_nan_s(co, "rpa_matchxyz");
        VMTEST_REG(co->cg, 0, -1, "RPA_MNODE_NAN 'xyz'");
        VMTEST_STATUS(co->cg, RVM_STATUS_N, "RPA_MNODE_NAN STATUS");
 
-
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchabc", rvm_asm(RPA_BXLOPT, DA, XX, XX, 0));
+       rpa_compiler_reference_opt_s(co, "rpa_matchabc");
        VMTEST_REG(co->cg, 0, 3, "RPA_MNODE_OPT 'abc'");
        VMTEST_STATUS(co->cg, 0, "RPA_MNODE_OPT STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchxyz", rvm_asm(RPA_BXLOPT, DA, XX, XX, 0));
+       rpa_compiler_reference_opt_s(co, "rpa_matchxyz");
        VMTEST_REG(co->cg, 0, 0, "RPA_MNODE_OPT 'xyz'");
        VMTEST_STATUS(co->cg, RVM_STATUS_Z, "RPA_MNODE_OPT STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchabc", rvm_asm(RPA_BXLMUL, DA, XX, XX, 0));
+       rpa_compiler_reference_mul_s(co, "rpa_matchabc");
        VMTEST_REG(co->cg, 0, 12, "RPA_MNODE_MUL 'abc'");
        VMTEST_STATUS(co->cg, 0, "RPA_MNODE_MUL STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchxyz", rvm_asm(RPA_BXLMUL, DA, XX, XX, 0));
+       rpa_compiler_reference_mul_s(co, "rpa_matchxyz");
        VMTEST_REG(co->cg, 0, -1, "RPA_MNODE_MUL 'xyz'");
        VMTEST_STATUS(co->cg, RVM_STATUS_N, "RPA_MNODE_MUL STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchabc", rvm_asm(RPA_BXLMOP, DA, XX, XX, 0));
+       rpa_compiler_reference_mop_s(co, "rpa_matchabc");
        VMTEST_REG(co->cg, 0, 12, "RPA_MNODE_MOP 'abc'");
        VMTEST_STATUS(co->cg, 0, "RPA_MNODE_MOP STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_matchxyz", rvm_asm(RPA_BXLMOP, DA, XX, XX, 0));
+       rpa_compiler_reference_mop_s(co, "rpa_matchxyz");
        VMTEST_REG(co->cg, 0, 0, "RPA_MNODE_MOP 'xyz'");
        VMTEST_STATUS(co->cg, RVM_STATUS_Z, "RPA_MNODE_MOP STATUS");
 }
@@ -135,13 +134,8 @@ int main(int argc, char *argv[])
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, R_TOP, DA, XX, -1));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
-
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
+
        code_rpa_matchmnode(co, stat);
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_EXT, XX, XX, XX, 0));
index 4ca3400..d0503ef 100644 (file)
@@ -58,7 +58,7 @@ void codegen_rpa_match_xyz(rpa_compiler_t *co)
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_STRING, ruleidx, rvm_asm(RPA_EMITSTART, DA, R_TOP, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSHM, DA, XX, XX, BIT(R_TOP)|BIT(R_WHT)|BIT(LR)));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_squared", rvm_asm(RPA_BXLMOP, DA, XX, XX, 0));
+       rpa_compiler_reference_mop_s(co, "rpa_match_squared");
        rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_BRANCH, ruleend, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'x'));
@@ -126,10 +126,10 @@ void codegen_rpa_match_xyzorabc(rpa_compiler_t *co)
        rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSHM, DA, XX, XX, BIT(R_TOP)|BIT(R_WHT)|BIT(LR)));
 
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_xyz", rvm_asm(RPA_BXLMOP, DA, XX, XX, 0));
+       rpa_compiler_reference_mop_s(co, "rpa_match_xyz");
        rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_BRANCH, ruleend, rvm_asm(RVM_BGRE, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_abc", rvm_asm(RPA_BXLMOP, DA, XX, XX, 0));
+       rpa_compiler_reference_mop_s(co, "rpa_match_abc");
        rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_BRANCH, ruleend, rvm_asm(RVM_BGRE, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R_TOP)|BIT(R_WHT)|BIT(LR)));
@@ -158,10 +158,10 @@ void codegen_rpa_match_squared(rpa_compiler_t *co)
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '['));
        rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_BRANCH, ruleend, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_xyzorabc", rvm_asm(RPA_BXLMOP, DA, XX, XX, 0));
+       rpa_compiler_reference_mop_s(co, "rpa_match_xyzorabc");
        rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_BRANCH, ruleend, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_aorb", rvm_asm(RPA_BXLMOP, DA, XX, XX, 0));
+       rpa_compiler_reference_mop_s(co, "rpa_match_aorb");
        rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_BRANCH, ruleend, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, ']'));
@@ -283,13 +283,8 @@ exec:
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, FP, DA, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, SP, DA, XX, 0));
 
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_nan", rvm_asm(RPA_SETBXLNAN, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mul", rvm_asm(RPA_SETBXLMUL, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_opt", rvm_asm(RPA_SETBXLOPT, DA, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpacompiler_mnode_mop", rvm_asm(RPA_SETBXLMOP, DA, XX, XX, 0));
-
        rvm_codegen_addins(co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
-       rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_squared", rvm_asm(RPA_BXLMUL, DA, XX, XX, 0));
+       rpa_compiler_reference_mul_s(co, "rpa_match_squared");
        rvm_codegen_addins(co->cg, rvm_asm(RVM_NOP, XX, XX, XX, 0xabc));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_EXT, XX, XX, XX, 0));