+void gen_eqless(struct treenode *bnode, char *op, short e0, short e1, short deep)
+{
+ printf("\t//gen_eqless_%i%i @ %i\n", e0, e1, deep);
+ if(e0) { KIDREG2PARM(0); } else { KIDREG2ID(0); }
+ if(e1) { KIDREG2PARM(1); } else { KIDREG2ID(1); }
+
+ if(e0 && e1) {
+ printf("\tcmp %%%s, %%%s\n", KID_REG(1), KID_REG(0));
+ } else if(e0 && !e1) {
+ if (deep == 0) {
+ printf("\tcmp $%d, %%%s\n", KID_VAL(1), KID_REG(0));
+ } else if (deep == 1) {
+ KIDKIDREG2PARM(0,0);
+ printf("\tcmp $%d, %%%s\n", KID_VAL(1), KIDKID_REG(0,0));
+ } else if (deep == 2) {
+ KIDKIDKIDREG2PARM(0,0,0);
+ printf("\tcmp $%d, %%%s\n", KID_VAL(1), KIDKIDKID_REG(0,0,0));
+ }
+ } else if(!e0 && e1) {
+ if(strcmp("e", op) == 0) {
+ printf("\tcmp $%d, %%%s\n", KID_VAL(0), KID_REG(1));
+ } else {
+ moveimm(KID_VAL(0), BN_REG);
+ printf("\tcmp %%%s, %%%s\n", KID_REG(1), BN_REG);
+ }
+ }
+ printf("\tset%s %%%s\n", op, reg_64to8l(BN_REG));
+ printf("\tand $1, %%%s\n", BN_REG);
+}
+
+void gen_lea(struct treenode *bnode, short e)
+{
+ printf("\t//gen_lea(e: %i)\n", e);
+ KIDREG2PARM(0);
+ if(e) {
+ KIDKIDREG2PARM(1,0);
+ printf("\tlea (%%%s,%%%s,%d), %%%s\n", KID_REG(0), KIDKID_REG(1,0), -1 * KIDKID_VAL(1,1), BN_REG);
+ } else {
+ KIDKIDREG2PARM(1,1);
+ printf("\tlea (%%%s,%%%s,%d), %%%s\n", KID_REG(0), KIDKID_REG(1,1), -1 * KIDKID_VAL(1,0), BN_REG);
+ }
+}
+