/** * add the primary and secondary registers * if lval2 is int pointer and lval is not, scale lval * @param lval * @param lval2 */ void gen_add(LVALUE *lval, LVALUE *lval2) { gen_pop (); if (dbltest (lval2, lval)) { gen_swap (); gen_multiply_by_two (); gen_swap (); } output_line ("dad \td"); }
/** * add the primary and secondary registers * if lval2 is int pointer and lval is not, scale lval * @param lval * @param lval2 */ void gen_add(LVALUE *lval, LVALUE *lval2) { if (dbltest (lval2, lval)) { gen_swap (); gen_multiply_by_two(); gen_swap (); } output_line ("popadd r1 r2"); stkp = stkp + INTSIZE; }
/** * multiply the primary register by the length of some variable * @param type * @param size */ void gen_multiply(int type, int size) { switch (type) { case CINT: case UINT: gen_multiply_by_two(); break; case STRUCT: gen_immediate2(); output_number(size); newline(); gen_call("ccmul"); break ; default: break; } }