void rpacompiler_mnode_nan(rpa_compiler_t *co)
{
rvm_codegen_addlabel_s(co->cg, "rpacompiler_mnode_nan");
- rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, R_WHT, XX, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSH, LR, XX, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_BXL, R_WHT, XX, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_POP, LR, XX, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asml(RVM_CMP, R0, DA, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
}
exp.start = rvm_codegen_getcodesize(co->cg);
rvm_codegen_addins(co->cg, rvm_asm(RPA_LOOPDETECT, DA, R_TOP, XX, exp.start));
rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R0, DA, XX, 0));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_BLES, DA, XX, XX, 5));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_BGRE, DA, XX, XX, 3));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R0, DA, XX, -1));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R0, DA, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_BLES, DA, XX, XX, 4));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_BGRE, DA, XX, XX, 2));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOVS, R0, DA, XX, -1));
rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
rvm_codegen_addins(co->cg, rvm_asm(RPA_GETRECLEN, R0, XX, XX, 0));
{
rpa_ruledef_t exp = r_array_pop(co->expressions, rpa_ruledef_t);
+ /*
+ * Load R_TOP from the stack and check if we have made a progress
+ */
rvm_codegen_addins(co->cg, rvm_asm(RVM_LDS, R2, SP, DA, -3));
rvm_codegen_addins(co->cg, rvm_asm(RVM_SUBS, R0, R_TOP, R2, 0));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_BLEQ, DA, XX, XX, 9));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_BGRE, DA, XX, XX, 4));
+ /*
+ * If R_LOO is 0, nothing matched - goto end
+ */
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R_LOO, DA, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_BGRE, DA, XX, XX, 9));
+ rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, exp.endidx, rvm_asm(RVM_B, DA, XX, XX, 0));
+
+ /*
+ * Loop again
+ */
rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_LOO, R0, XX, 0));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_PRN, R_LOO, XX, XX, 0));
rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_STRING, exp.emitidx, rvm_asm(RPA_EMITEND, DA, R2, R_LOO, 0));
rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECID, DA, XX, XX, exp.start));
rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, R2, XX, 0));
rvm_codegen_addins(co->cg, rvm_asm(RVM_STS, R1, SP, DA, -4));
rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, exp.loopidx, rvm_asm(RVM_B, DA, XX, XX, 0));
+ /*
+ * End the loop successfully R0 > 0
+ */
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOVS, R0, R_LOO, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R1)|BIT(R_TOP)|BIT(R_LOO)|BIT(R_WHT)|BIT(LR)));
+ rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, R1, XX, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_ADD, R_TOP, R_TOP, R0, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
+ rvm_codegen_redefinelabel(co->cg, exp.endidx);
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R0)|BIT(R_TOP)|BIT(R_LOO)|BIT(R_WHT)|BIT(LR)));
+ rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, R0, XX, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOVS, R0, DA, XX, -1));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
+
+ return 0;
+}
+
+
+rint rpa_compiler_loop_end_old(rpa_compiler_t *co)
+{
+ rpa_ruledef_t exp = r_array_pop(co->expressions, rpa_ruledef_t);
+
+ /*
+ * Load R_TOP from the stack and check if we have made a progress
+ */
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_LDS, R2, SP, DA, -3));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_SUBS, R0, R_TOP, R2, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_BLEQ, DA, XX, XX, 8));
+
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_LOO, R0, XX, 0));
+ rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_STRING, exp.emitidx, rvm_asm(RPA_EMITEND, DA, R2, R_LOO, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECID, DA, XX, XX, exp.start));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, R2, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RPA_GETRECLEN, R1, XX, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_STS, R1, SP, DA, -4));
+ rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, exp.loopidx, rvm_asm(RVM_B, DA, XX, XX, 0));
rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R0, R_LOO, XX, 0));
rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R1)|BIT(R_TOP)|BIT(R_LOO)|BIT(R_WHT)|BIT(LR)));
rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, R1, XX, XX, 0));
rvm_codegen_redefinelabel(co->cg, exp.endidx);
rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R0)|BIT(R_TOP)|BIT(R_LOO)|BIT(R_WHT)|BIT(LR)));
rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, R0, XX, XX, 0));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R0, DA, XX, -1));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R0, DA, XX, 0));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOVS, R0, DA, XX, -1));
rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
-
return 0;
}
-
rint rpa_compiler_rule_begin(rpa_compiler_t *co, const rchar *name, ruint namesize)
{
rpa_ruledef_t exp;
rvm_codegen_redefinelabel(co->cg, exp.endidx);
rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R0)|BIT(R_TOP)|BIT(R_WHT)|BIT(LR)));
rvm_codegen_addins(co->cg, rvm_asm(RPA_SETRECLEN, R0, XX, XX, 0));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R0, DA, XX, -1));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOVS, R0, DA, XX, -1));
rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
return 0;
}
rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
rvm_codegen_redefinelabel(co->cg, exp.endidx);
rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R_TOP)|BIT(R_WHT)|BIT(LR)));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R0, DA, XX, -1));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOVS, R0, DA, XX, -1));
rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
rvm_codegen_replaceins(co->cg, exp.branch, rvm_asm(RVM_B, DA, XX, XX, rvm_codegen_getcodesize(co->cg) - exp.branch));
rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_JUMP, exp.labelidx, rvm_asm(RVM_MOV, R_WHT, DA, XX, 0));
rpa_ruledef_t exp = r_array_pop(co->expressions, rpa_ruledef_t);
rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R_TOP)|BIT(R_WHT)|BIT(LR)));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R0, DA, XX, -1));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOVS, R0, DA, XX, -1));
rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
rvm_codegen_redefinelabel(co->cg, exp.endidx);
rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R1)|BIT(R_WHT)|BIT(LR)));
rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
rvm_codegen_redefinelabel(co->cg, exp.endidx);
rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R_TOP)|BIT(R_WHT)|BIT(LR)));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R0, DA, XX, -1));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOVS, R0, DA, XX, -1));
rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
rvm_codegen_replaceins(co->cg, exp.branch, rvm_asm(RVM_B, DA, XX, XX, rvm_codegen_getcodesize(co->cg) - exp.branch));
rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_JUMP, exp.labelidx, rvm_asm(RVM_MOV, R_WHT, DA, XX, 0));
}
+rint rpa_compiler_loopybranch_begin(rpa_compiler_t *co)
+{
+ rpa_ruledef_t exp;
+ rchar endlabel[64];
+
+ exp.branch = rvm_codegen_addins(co->cg, rvm_asm(RVM_B, DA, XX, XX, 0));
+ r_snprintf(endlabel, sizeof(endlabel) - 1, "__begin:%ld", rvm_codegen_getcodesize(co->cg));
+ exp.labelidx = rvm_codegen_addlabel_s(co->cg, endlabel);
+ exp.start = rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSHM, DA, XX, XX, BIT(R_TOP)|BIT(R_WHT)|BIT(LR)));
+ r_snprintf(endlabel, sizeof(endlabel) - 1, "__end:%ld", exp.start);
+ exp.endidx = rvm_codemap_invalid_add_s(co->cg->codemap, endlabel);
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R_LOO, DA, XX, 0));
+ rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, exp.endidx, rvm_asm(RVM_BLEQ, DA, XX, XX, 0));
+
+ r_array_add(co->expressions, &exp);
+ return 0;
+}
+
+
+rint rpa_compiler_loopybranch_end(rpa_compiler_t *co, ruint qflag)
+{
+ return rpa_compiler_branch_end(co, qflag);
+}
+
+
+rint rpa_compiler_nonloopybranch_begin(rpa_compiler_t *co)
+{
+ rpa_ruledef_t exp;
+ rchar endlabel[64];
+
+ exp.branch = rvm_codegen_addins(co->cg, rvm_asm(RVM_B, DA, XX, XX, 0));
+ r_snprintf(endlabel, sizeof(endlabel) - 1, "__begin:%ld", rvm_codegen_getcodesize(co->cg));
+ exp.labelidx = rvm_codegen_addlabel_s(co->cg, endlabel);
+ exp.start = rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSHM, DA, XX, XX, BIT(R_TOP)|BIT(R_WHT)|BIT(LR)));
+ r_snprintf(endlabel, sizeof(endlabel) - 1, "__end:%ld", exp.start);
+ exp.endidx = rvm_codemap_invalid_add_s(co->cg->codemap, endlabel);
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R_LOO, DA, XX, 0));
+ rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, exp.endidx, rvm_asm(RVM_BGRE, DA, XX, XX, 0));
+
+ r_array_add(co->expressions, &exp);
+ return 0;
+}
+
+
+rint rpa_compiler_nonloopybranch_end(rpa_compiler_t *co, ruint qflag)
+{
+ return rpa_compiler_branch_end(co, qflag);
+}
+
+
rint rpa_compiler_class_begin(rpa_compiler_t *co)
{
rpa_ruledef_t exp;
rpa_ruledef_t exp = r_array_pop(co->expressions, rpa_ruledef_t);
rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R_TOP)|BIT(R_WHT)|BIT(LR)));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R0, DA, XX, -1));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOVS, R0, DA, XX, -1));
rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
rvm_codegen_redefinelabel(co->cg, exp.endidx);
rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R1)|BIT(R_WHT)|BIT(LR)));
rpa_ruledef_t exp = r_array_pop(co->expressions, rpa_ruledef_t);
rvm_codegen_addins(co->cg, rvm_asm(RVM_POPM, DA, XX, XX, BIT(R_TOP)|BIT(R_WHT)|BIT(LR)));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R0, DA, XX, -1));
+ rvm_codegen_addins(co->cg, rvm_asm(RVM_MOVS, R0, DA, XX, -1));
rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R0, DA, XX, 0));
rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
rvm_codegen_redefinelabel(co->cg, exp.endidx);
rpa_compiler_loop_begin_s(co, "rpa_match_aloop");
rpa_compiler_altexp_begin(co);
- rpa_compiler_branch_begin(co);
-
- rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R_LOO, DA, XX, 0));
- rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLEQ, DA, XX, XX, 0));
+ rpa_compiler_loopybranch_begin(co);
rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_aloop", rvm_asm(RPA_BXLWHT, R_MNODE_NAN, DA, XX, 0));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R0, DA, XX, 0));
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'));
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, 'b'));
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, 'c'));
rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
+ rpa_compiler_loopybranch_end(co, RPA_MATCH_NONE);
- rpa_compiler_branch_end(co, RPA_MATCH_NONE);
-
-
- rpa_compiler_branch_begin(co);
- rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R_LOO, DA, XX, 0));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_BGRE, DA, XX, XX, 7));
+ rpa_compiler_nonloopybranch_begin(co);
rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'a'));
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, 'b'));
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, 'c'));
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_end(co, RPA_MATCH_NONE);
rpa_compiler_altexp_end(co, RPA_MATCH_NONE);
rpa_compiler_loop_end(co);
rpa_compiler_loop_begin_s(co, "rpa_match_xloop");
rpa_compiler_altexp_begin(co);
- rpa_compiler_branch_begin(co);
-
- rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R_LOO, DA, XX, 0));
- rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLEQ, DA, XX, XX, 0));
+ rpa_compiler_loopybranch_begin(co);
rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_xloop", rvm_asm(RPA_BXLWHT, R_MNODE_NAN, DA, XX, 0));
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_BXLWHT, R_MNODE_NAN, DA, XX, 0));
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_loopybranch_end(co, RPA_MATCH_NONE);
-// rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R_LOO, DA, XX, 0));
-// rvm_codegen_addins(co->cg, rvm_asm(RVM_BEQ, DA, XX, XX, 2));
-// rvm_codegen_addins(co->cg, rvm_asm(RVM_EXT, XX, XX, XX, 0));
-
- rpa_compiler_branch_begin(co);
- rvm_codegen_addins(co->cg, rvm_asm(RVM_CMP, R_LOO, DA, XX, 0));
- rvm_codegen_addins(co->cg, rvm_asm(RVM_BGRE, DA, XX, XX, 3));
+ rpa_compiler_nonloopybranch_begin(co);
rvm_codegen_addrelocins_s(co->cg, RVM_RELOC_JUMP, "rpa_match_aloop", rvm_asm(RPA_BXLWHT, R_MNODE_NAN, DA, XX, 0));
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_end(co, RPA_MATCH_NONE);
rpa_compiler_altexp_end(co, RPA_MATCH_NONE);
rpa_compiler_loop_end(co);
rpa_compiler_exp_begin(co);
-/*
- rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'x'));
+ 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_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'y'));
+ rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'Y'));
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_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_BXLWHT, R_MNODE_NAN, DA, XX, 0));
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_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_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'z'));
+ 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_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'z'));
+ 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));
-*/
rpa_compiler_exp_end(co, RPA_MATCH_NONE);
rpastat_t *stat;
ruint mainoff;
rint i;
- char teststr[] = "abcabcabcXXXabcabcXXXabcabcababababzzzzzzzzzzzzzzzzzzzzzzzzzzz";
+ char teststr[] = "XYZabcabcabcXXXabcabcXXXabcabcabcabcZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
co = rpa_compiler_create();
stat = rpa_stat_create(4096);
rvm_cpu_addswitable(stat->cpu, common_calltable);
- rpa_stat_init(stat, teststr, teststr, teststr+40);
+ rpa_stat_init(stat, teststr, teststr, teststr+50);
mainoff = rvm_codegen_addins(co->cg, rvm_asml(RVM_NOP, XX, XX, XX, -1));
rvm_codegen_addins(co->cg, rvm_asml(RVM_MOV, R_LOO, DA, XX, 5));