remove optimised arithmetic instructions. They made the emulator even bigger than
usual, and they were not performing.
This commit is contained in:
266
C/amasm.c
266
C/amasm.c
@@ -660,113 +660,6 @@ a_fil(op_numbers opcodex, op_numbers opcodey, yamop *code_p, int pass_no, struct
|
||||
return code_p;
|
||||
}
|
||||
|
||||
static yamop *
|
||||
a_sdll(op_numbers opcode, yamop *code_p, int pass_no, struct PSEUDO *cpc, UInt lab1, UInt lab2, struct intermediates *cip)
|
||||
{
|
||||
if (pass_no) {
|
||||
code_p->opc = emit_op(opcode);
|
||||
code_p->u.sdll.s = cpc->rnd2;
|
||||
code_p->u.sdll.d[0] = (CELL)FunctorDouble;
|
||||
code_p->u.sdll.d[1] = RepAppl(cpc->rnd1)[1];
|
||||
#if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
|
||||
code_p->u.sdll.d[2] = RepAppl(cpc->rnd1)[2];
|
||||
#endif
|
||||
if (lab1)
|
||||
code_p->u.sdll.T = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab1]);
|
||||
else
|
||||
code_p->u.sdll.T = emit_a(Unsigned(NEXTOP(code_p,sdll)));
|
||||
if (lab2)
|
||||
code_p->u.sdll.F = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab2]);
|
||||
else
|
||||
code_p->u.sdll.F = FAILCODE;
|
||||
}
|
||||
GONEXT(sdll);
|
||||
return code_p;
|
||||
}
|
||||
|
||||
static yamop *
|
||||
a_snll(op_numbers opcode, yamop *code_p, int pass_no, struct PSEUDO *cpc, UInt lab1, UInt lab2, struct intermediates *cip)
|
||||
{
|
||||
if (pass_no) {
|
||||
code_p->opc = emit_op(opcode);
|
||||
code_p->u.snll.s = cpc->rnd2;
|
||||
code_p->u.snll.I = IntegerOfTerm(cpc->rnd1);
|
||||
if (lab1)
|
||||
code_p->u.snll.T = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab1]);
|
||||
else
|
||||
code_p->u.snll.T = emit_a(Unsigned(NEXTOP(code_p,snll)));
|
||||
if (lab2)
|
||||
code_p->u.snll.F = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab2]);
|
||||
else
|
||||
code_p->u.snll.F = FAILCODE;
|
||||
}
|
||||
GONEXT(snll);
|
||||
return code_p;
|
||||
}
|
||||
|
||||
static yamop *
|
||||
a_ssll(op_numbers opcode, yamop *code_p, int pass_no, struct PSEUDO *cpc, UInt lab1, UInt lab2, struct intermediates *cip)
|
||||
{
|
||||
if (pass_no) {
|
||||
code_p->opc = emit_op(opcode);
|
||||
code_p->u.ssll.s1 = cpc->rnd1;
|
||||
code_p->u.ssll.s2 = cpc->rnd2;
|
||||
if (lab1)
|
||||
code_p->u.ssll.T = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab1]);
|
||||
else
|
||||
code_p->u.ssll.T = emit_a(Unsigned(NEXTOP(code_p,ssll)));
|
||||
if (lab2)
|
||||
code_p->u.ssll.F = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab2]);
|
||||
else
|
||||
code_p->u.ssll.F = FAILCODE;
|
||||
}
|
||||
GONEXT(ssll);
|
||||
return code_p;
|
||||
}
|
||||
|
||||
static yamop *
|
||||
a_ssd(op_numbers opcode, yamop *code_p, int pass_no, struct PSEUDO *cpc)
|
||||
{
|
||||
if (pass_no) {
|
||||
code_p->opc = emit_op(opcode);
|
||||
code_p->u.ssd.s0 = IntegerOfTerm(cpc->rnd1);
|
||||
code_p->u.ssd.s1 = IntegerOfTerm(cpc->rnd2);
|
||||
code_p->u.ssd.d[0] = (CELL)FunctorDouble;
|
||||
code_p->u.ssd.d[1] = RepAppl(cpc->rnd3)[1];
|
||||
#if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
|
||||
code_p->u.ssd.d[2] = RepAppl(cpc->rnd3)[2];
|
||||
#endif
|
||||
}
|
||||
GONEXT(ssd);
|
||||
return code_p;
|
||||
}
|
||||
|
||||
static yamop *
|
||||
a_ssn(op_numbers opcode, yamop *code_p, int pass_no, struct PSEUDO *cpc)
|
||||
{
|
||||
if (pass_no) {
|
||||
code_p->opc = emit_op(opcode);
|
||||
code_p->u.ssn.s0 = IntegerOfTerm(cpc->rnd1);
|
||||
code_p->u.ssn.s1 = IntegerOfTerm(cpc->rnd2);
|
||||
code_p->u.ssn.n = IntegerOfTerm(cpc->rnd3);
|
||||
}
|
||||
GONEXT(ssn);
|
||||
return code_p;
|
||||
}
|
||||
|
||||
static yamop *
|
||||
a_sss(op_numbers opcode, yamop *code_p, int pass_no, struct PSEUDO *cpc)
|
||||
{
|
||||
if (pass_no) {
|
||||
code_p->opc = emit_op(opcode);
|
||||
code_p->u.sss.s0 = IntegerOfTerm(cpc->rnd1);
|
||||
code_p->u.sss.s1 = IntegerOfTerm(cpc->rnd2);
|
||||
code_p->u.sss.s2 = IntegerOfTerm(cpc->rnd3);
|
||||
}
|
||||
GONEXT(sss);
|
||||
return code_p;
|
||||
}
|
||||
|
||||
inline static yamop *
|
||||
a_vp(op_numbers opcodex, op_numbers opcodey, yamop *code_p, int pass_no, struct PSEUDO *cpc, clause_info *clinfo)
|
||||
{
|
||||
@@ -3312,165 +3205,6 @@ do_pass(int pass_no, yamop **entry_codep, int assembling, int *clause_has_blobsp
|
||||
*clause_has_blobsp = TRUE;
|
||||
code_p = a_rd(_get_float, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case get_fi_op:
|
||||
code_p = a_fi(_get_fi_x, _get_fi_y, code_p, pass_no, cip->cpc, cip->exception_handler, cip);
|
||||
break;
|
||||
case get_f_op:
|
||||
code_p = a_fi(_get_f_x, _get_f_y, code_p, pass_no, cip->cpc, cip->exception_handler, cip);
|
||||
break;
|
||||
case get_i_op:
|
||||
code_p = a_fi(_get_i_x, _get_i_y, code_p, pass_no, cip->cpc, cip->exception_handler, cip);
|
||||
break;
|
||||
case put_fi_var_op:
|
||||
code_p = a_fi(_put_fi_var_x, _put_fi_var_y, code_p, pass_no, cip->cpc, cip->success_handler, cip);
|
||||
break;
|
||||
case put_f_var_op:
|
||||
code_p = a_fi(_put_f_var_x, _put_f_var_y, code_p, pass_no, cip->cpc, cip->success_handler, cip);
|
||||
break;
|
||||
case put_i_var_op:
|
||||
code_p = a_fi(_put_i_var_x, _put_i_var_y, code_p, pass_no, cip->cpc, cip->success_handler, cip);
|
||||
break;
|
||||
case put_fi_val_op:
|
||||
code_p = a_fil(_put_fi_val_x, _put_fi_val_y, code_p, pass_no, cip->cpc, cip->success_handler, cip->failure_handler, cip);
|
||||
break;
|
||||
case put_f_val_op:
|
||||
code_p = a_fil(_put_f_val_x, _put_f_val_y, code_p, pass_no, cip->cpc, cip->success_handler, cip->failure_handler, cip);
|
||||
break;
|
||||
case put_i_val_op:
|
||||
code_p = a_fil(_put_i_val_x, _put_i_val_y, code_p, pass_no, cip->cpc, cip->success_handler, cip->failure_handler, cip);
|
||||
break;
|
||||
case a_eqc_float_op:
|
||||
*clause_has_blobsp = TRUE;
|
||||
code_p = a_sdll(_a_eqc_float, code_p, pass_no, cip->cpc, cip->success_handler, cip->failure_handler, cip);
|
||||
break;
|
||||
case a_eqc_int_op:
|
||||
code_p = a_snll(_a_eqc_int, code_p, pass_no, cip->cpc, cip->success_handler, cip->failure_handler, cip);
|
||||
break;
|
||||
case a_eq_op:
|
||||
code_p = a_ssll(_a_eq, code_p, pass_no, cip->cpc, cip->success_handler, cip->failure_handler, cip);
|
||||
break;
|
||||
case ltc_float_op:
|
||||
*clause_has_blobsp = TRUE;
|
||||
code_p = a_sdll(_ltc_float, code_p, pass_no, cip->cpc, cip->success_handler, cip->failure_handler, cip);
|
||||
break;
|
||||
case ltc_int_op:
|
||||
code_p = a_snll(_ltc_int, code_p, pass_no, cip->cpc, cip->success_handler, cip->failure_handler, cip);
|
||||
break;
|
||||
case lt_op:
|
||||
code_p = a_ssll(_lt, code_p, pass_no, cip->cpc, cip->success_handler, cip->failure_handler, cip);
|
||||
break;
|
||||
case gtc_float_op:
|
||||
*clause_has_blobsp = TRUE;
|
||||
code_p = a_sdll(_gtc_float, code_p, pass_no, cip->cpc, cip->success_handler, cip->failure_handler, cip);
|
||||
break;
|
||||
case gtc_int_op:
|
||||
code_p = a_snll(_gtc_int, code_p, pass_no, cip->cpc, cip->success_handler, cip->failure_handler, cip);
|
||||
break;
|
||||
case add_float_c_op:
|
||||
*clause_has_blobsp = TRUE;
|
||||
code_p = a_ssd(_add_float_c, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case add_int_c_op:
|
||||
code_p = a_ssn(_add_int_c, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case add_op:
|
||||
code_p = a_sss(_add, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case sub_float_c_op:
|
||||
*clause_has_blobsp = TRUE;
|
||||
code_p = a_ssd(_sub_float_c, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case sub_int_c_op:
|
||||
code_p = a_ssn(_sub_int_c, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case sub_op:
|
||||
code_p = a_sss(_sub, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case mul_float_c_op:
|
||||
*clause_has_blobsp = TRUE;
|
||||
code_p = a_ssd(_mul_float_c, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case mul_int_c_op:
|
||||
code_p = a_ssn(_mul_int_c, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case mul_op:
|
||||
code_p = a_sss(_mul, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case sr_c1_op:
|
||||
code_p = a_ssn(_sr_c1, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case sr_c2_op:
|
||||
code_p = a_ssn(_sr_c2, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case sr_op:
|
||||
code_p = a_sss(_sr, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case sl_c1_op:
|
||||
code_p = a_ssn(_sl_c1, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case sl_c2_op:
|
||||
code_p = a_ssn(_sl_c2, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case sl_op:
|
||||
code_p = a_sss(_sl, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case rem_c1_op:
|
||||
code_p = a_ssn(_rem_c1, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case rem_c2_op:
|
||||
code_p = a_ssn(_rem_c2, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case rem_op:
|
||||
code_p = a_sss(_rem, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case mod_c1_op:
|
||||
code_p = a_ssn(_mod_c1, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case mod_c2_op:
|
||||
code_p = a_ssn(_mod_c2, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case mod_op:
|
||||
code_p = a_sss(_mod, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case idiv_c1_op:
|
||||
code_p = a_ssn(_idiv_c1, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case idiv_c2_op:
|
||||
code_p = a_ssn(_idiv_c2, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case idiv_op:
|
||||
code_p = a_sss(_idiv, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case fdiv_c1_op:
|
||||
code_p = a_ssd(_fdiv_c1, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case fdiv_c2_op:
|
||||
code_p = a_ssd(_fdiv_c2, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case fdiv_op:
|
||||
code_p = a_sss(_fdiv, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case a_and_c_op:
|
||||
code_p = a_ssn(_a_and_c, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case a_and_op:
|
||||
code_p = a_sss(_a_and, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case a_or_c_op:
|
||||
code_p = a_ssn(_a_or_c, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case a_or_op:
|
||||
code_p = a_sss(_a_or, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case xor_c_op:
|
||||
code_p = a_ssn(_xor_c, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case xor_op:
|
||||
code_p = a_sss(_xor, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case uminus_op:
|
||||
code_p = a_sss(_uminus, code_p, pass_no, cip->cpc);
|
||||
break;
|
||||
case label_ctl_op:
|
||||
code_p = a_special_label(code_p, pass_no, cip);
|
||||
break;
|
||||
|
Reference in New Issue
Block a user