diff options
Diffstat (limited to 'iburg/briggs/icg-grammars/x86-64.misc.pyout')
-rw-r--r-- | iburg/briggs/icg-grammars/x86-64.misc.pyout | 5978 |
1 files changed, 5978 insertions, 0 deletions
diff --git a/iburg/briggs/icg-grammars/x86-64.misc.pyout b/iburg/briggs/icg-grammars/x86-64.misc.pyout new file mode 100644 index 00000000000..47d50fc4951 --- /dev/null +++ b/iburg/briggs/icg-grammars/x86-64.misc.pyout @@ -0,0 +1,5978 @@ +#line 19 "x86-64.misc.py" +addr : PLUS_DI(base64 | index64 | disp) [0, 0] +#line 22 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->a.index; + $$->a.scale = $2->a.scale; + $$->a.disp = $3->a.disp; + $$->a.string = $3->a.string; + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->a.index; + }, + emit { + $$->rtl = gen_rtx_addr(DImode, $1->rtl, $2->rtl, $3->rtl); + }; +#line 45 "x86-64.misc.py" +addr : PLUS_DI(base64 | MULT_DI(PLUS_DI(r64 | imm5) | CONST_P8)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 8; + $$->a.disp = $3->val * 8; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(8)), + GEN_INT($3->val * 8)); + }; +#line 46 "x86-64.misc.py" +addr : PLUS_DI(base64 | MULT_DI(PLUS_DI(r64 | imm29) | CONST_P8)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 8; + $$->a.disp = $3->val * 8; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(8)), + GEN_INT($3->val * 8)); + }; +#line 47 "x86-64.misc.py" +addr : PLUS_DI(base64 | MULT_DI(PLUS_DI(r64 | imm6) | CONST_P4)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 4; + $$->a.disp = $3->val * 4; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(4)), + GEN_INT($3->val * 4)); + }; +#line 48 "x86-64.misc.py" +addr : PLUS_DI(base64 | MULT_DI(PLUS_DI(r64 | imm30) | CONST_P4)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 4; + $$->a.disp = $3->val * 4; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(4)), + GEN_INT($3->val * 4)); + }; +#line 49 "x86-64.misc.py" +addr : PLUS_DI(base64 | MULT_DI(PLUS_DI(r64 | imm7) | CONST_P2)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 2; + $$->a.disp = $3->val * 2; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(2)), + GEN_INT($3->val * 2)); + }; +#line 50 "x86-64.misc.py" +addr : PLUS_DI(base64 | MULT_DI(PLUS_DI(r64 | imm31) | CONST_P2)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 2; + $$->a.disp = $3->val * 2; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(2)), + GEN_INT($3->val * 2)); + }; +#line 52 "x86-64.misc.py" +addr : PLUS_DI(base64 | ASHIFT_DI(PLUS_DI(r64 | imm5), CONST_P3)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 8; + $$->a.disp = $3->val * 8; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(8)), + GEN_INT($3->val * 8)); + }; +#line 53 "x86-64.misc.py" +addr : PLUS_DI(base64 | ASHIFT_DI(PLUS_DI(r64 | imm29), CONST_P3)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 8; + $$->a.disp = $3->val * 8; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(8)), + GEN_INT($3->val * 8)); + }; +#line 54 "x86-64.misc.py" +addr : PLUS_DI(base64 | ASHIFT_DI(PLUS_DI(r64 | imm6), CONST_P2)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 4; + $$->a.disp = $3->val * 4; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(4)), + GEN_INT($3->val * 4)); + }; +#line 55 "x86-64.misc.py" +addr : PLUS_DI(base64 | ASHIFT_DI(PLUS_DI(r64 | imm30), CONST_P2)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 4; + $$->a.disp = $3->val * 4; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(4)), + GEN_INT($3->val * 4)); + }; +#line 56 "x86-64.misc.py" +addr : PLUS_DI(base64 | ASHIFT_DI(PLUS_DI(r64 | imm7), CONST_P1)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 2; + $$->a.disp = $3->val * 2; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(2)), + GEN_INT($3->val * 2)); + }; +#line 57 "x86-64.misc.py" +addr : PLUS_DI(base64 | ASHIFT_DI(PLUS_DI(r64 | imm31), CONST_P1)) [0, 1] +#line 61 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->r; + $$->a.scale = 2; + $$->a.disp = $3->val * 2; + $$->a.string = NULL; + }, + costs { + forgettable($2->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $2->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(2)), + GEN_INT($3->val * 2)); + }; +#line 93 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm7 | MULT_DI(PLUS_DI(r64 | imm4) | CONST_P8)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 8; + $$->a.disp = $2->val + $4->val * 8; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(8)), + GEN_INT($2->val + $4->val * 8)); + }; +#line 94 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm31 | MULT_DI(PLUS_DI(r64 | imm28) | CONST_P8)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 8; + $$->a.disp = $2->val + $4->val * 8; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(8)), + GEN_INT($2->val + $4->val * 8)); + }; +#line 95 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm7 | MULT_DI(PLUS_DI(r64 | imm5) | CONST_P4)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 4; + $$->a.disp = $2->val + $4->val * 4; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(4)), + GEN_INT($2->val + $4->val * 4)); + }; +#line 96 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm31 | MULT_DI(PLUS_DI(r64 | imm29) | CONST_P4)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 4; + $$->a.disp = $2->val + $4->val * 4; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(4)), + GEN_INT($2->val + $4->val * 4)); + }; +#line 97 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm7 | MULT_DI(PLUS_DI(r64 | imm6) | CONST_P2)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 2; + $$->a.disp = $2->val + $4->val * 2; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(2)), + GEN_INT($2->val + $4->val * 2)); + }; +#line 98 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm31 | MULT_DI(PLUS_DI(r64 | imm30) | CONST_P2)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 2; + $$->a.disp = $2->val + $4->val * 2; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(2)), + GEN_INT($2->val + $4->val * 2)); + }; +#line 100 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm7 | ASHIFT_DI(PLUS_DI(r64 | imm4), CONST_P3)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 8; + $$->a.disp = $2->val + $4->val * 8; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(8)), + GEN_INT($2->val + $4->val * 8)); + }; +#line 101 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm31 | ASHIFT_DI(PLUS_DI(r64 | imm28), CONST_P3)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 8; + $$->a.disp = $2->val + $4->val * 8; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(8)), + GEN_INT($2->val + $4->val * 8)); + }; +#line 102 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm7 | ASHIFT_DI(PLUS_DI(r64 | imm5), CONST_P2)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 4; + $$->a.disp = $2->val + $4->val * 4; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(4)), + GEN_INT($2->val + $4->val * 4)); + }; +#line 103 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm31 | ASHIFT_DI(PLUS_DI(r64 | imm29), CONST_P2)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 4; + $$->a.disp = $2->val + $4->val * 4; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(4)), + GEN_INT($2->val + $4->val * 4)); + }; +#line 104 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm7 | ASHIFT_DI(PLUS_DI(r64 | imm6), CONST_P1)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 2; + $$->a.disp = $2->val + $4->val * 2; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(2)), + GEN_INT($2->val + $4->val * 2)); + }; +#line 105 "x86-64.misc.py" +addr : PLUS_DI(base64 | imm31 | ASHIFT_DI(PLUS_DI(r64 | imm30), CONST_P1)) [0, 0] +#line 109 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $3, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $3->r; + $$->a.scale = 2; + $$->a.disp = $2->val + $4->val * 2; + $$->a.string = NULL; + }, + costs { + forgettable($3->r); + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $3->r; + }, + emit { + rtx src2 = gen_rtx_REG(DImode, $3->r); + $$->rtl = gen_rtx_addr(DImode, $1->rtl, + gen_rtx_MULT(DImode, src2, GEN_INT(2)), + GEN_INT($2->val + $4->val * 2)); + }; +#line 137 "x86-64.misc.py" +addr : PLUS_DI(base64 | index64) [0, 0] +#line 140 "x86-64.misc.py" + supairs { + suOrder2($$, $1, $2, kid, kids); + }, + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = $2->a.index; + $$->a.scale = $2->a.scale; + $$->a.disp = 0; + $$->a.string = NULL; + }, + final { + $$->a.base = $1->a.base; + $$->a.index = $2->a.index; + }, + emit { + $$->rtl = gen_rtx_PLUS(DImode, $1->rtl, $2->rtl); + }; +#line 162 "x86-64.misc.py" +addr : PLUS_DI(base64 | disp) [0, 0] +#line 165 "x86-64.misc.py" + names { + $$->a.base = $1->a.base; + $$->a.base_valid = $1->a.base_valid; + $$->a.index = 0; + $$->a.scale = 0; + $$->a.disp = $2->a.disp; + $$->a.string = $2->a.string; + }, + final { + $$->a.base = $1->a.base; + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_PLUS(DImode, $1->rtl, $2->rtl); + }; +#line 187 "x86-64.misc.py" +addr : PLUS_DI(index64 | imm32) [0, 1] +#line 190 "x86-64.misc.py" + names { + $$->a.base_valid = 0; + $$->a.index = $1->a.index; + $$->a.scale = $1->a.scale; + $$->a.disp = $2->val; + $$->a.string = $2->a.string; + }, + final { + $$->a.index = $1->a.index; + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_PLUS(DImode, + $1->rtl, + gen_rtx_imm_constant($2->val, $2->a.string, $2->rtl)); + }; +#line 213 "x86-64.misc.py" +addr : base64 [0, 0] +#line 216 "x86-64.misc.py" + names { + $$->a.index = 0; + $$->a.scale = 0; + $$->a.disp = 0; + $$->a.string = NULL; + }, + emit { + $$->rtl = $1->rtl; + }; +#line 229 "x86-64.misc.py" +addr : index64 [0, 5] +#line 232 "x86-64.misc.py" + names { + $$->a.base_valid = 0; + $$->a.disp = 0; + $$->a.string = NULL; + }, + emit { + $$->rtl = $1->rtl; + }; +#line 249 "x86-64.misc.py" +addr : symbol32 [0, 1] +#line 253 "x86-64.misc.py" + names { + $$->a = $1->a; /* preserve all semantic info */ + }, + emit { + rtx expr = $$->rtl; /* RTL from original tree (thin ice!) */ + $$->rtl = gen_rtx_imm_constant($$->a.disp, $$->a.string, expr); + }; +#line 250 "x86-64.misc.py" +addr : symbol64 [0, 1] +#line 253 "x86-64.misc.py" + names { + $$->a = $1->a; /* preserve all semantic info */ + }, + emit { + rtx expr = $$->rtl; /* RTL from original tree (thin ice!) */ + $$->rtl = gen_rtx_imm_constant($$->a.disp, $$->a.string, expr); + }; +#line 264 "x86-64.misc.py" +addr : imm32 [0, 1] +#line 267 "x86-64.misc.py" + names { + $$->a.base_valid = 0; + $$->a.index = 0; + $$->a.scale = 0; + $$->a.disp = $1->val; + }, + emit { + rtx expr = $$->rtl; /* RTL from original tree (thin ice!) */ + $$->rtl = gen_rtx_imm_constant($$->a.disp, $$->a.string, expr); + }; +#line 281 "x86-64.misc.py" +disp : imm8 [0, 0] +#line 285 "x86-64.misc.py" + names { + $$->a.disp = $1->val; + }, + emit { + $$->rtl = gen_rtx_imm_constant($$->a.disp, $$->a.string, $$->rtl); + }; +#line 282 "x86-64.misc.py" +disp : imm32 [0, 0] +#line 285 "x86-64.misc.py" + names { + $$->a.disp = $1->val; + }, + emit { + $$->rtl = gen_rtx_imm_constant($$->a.disp, $$->a.string, $$->rtl); + }; +#line 295 "x86-64.misc.py" +base64 : r64 [0, 1] +#line 301 "x86-64.misc.py" + names { + $$->a.base = $1->r; + $$->a.base_valid = 1; + $$->a.base_rip = 0; + }, + costs { + forgettable($1->r); + }, + final { + $$->a.base = $1->r; + }, + emit { + $$->rtl = gen_rtx_REG(DImode, $1->r); + }; +#line 296 "x86-64.misc.py" +base32 : r32 [0, 1] +#line 301 "x86-64.misc.py" + names { + $$->a.base = $1->r; + $$->a.base_valid = 1; + $$->a.base_rip = 0; + }, + costs { + forgettable($1->r); + }, + final { + $$->a.base = $1->r; + }, + emit { + $$->rtl = gen_rtx_REG(SImode, $1->r); + }; +#line 297 "x86-64.misc.py" +base16 : r16 [0, 1] +#line 301 "x86-64.misc.py" + names { + $$->a.base = $1->r; + $$->a.base_valid = 1; + $$->a.base_rip = 0; + }, + costs { + forgettable($1->r); + }, + final { + $$->a.base = $1->r; + }, + emit { + $$->rtl = gen_rtx_REG(SImode, $1->r); + }; +#line 298 "x86-64.misc.py" +base8 : r8 [0, 1] +#line 301 "x86-64.misc.py" + names { + $$->a.base = $1->r; + $$->a.base_valid = 1; + $$->a.base_rip = 0; + }, + costs { + forgettable($1->r); + }, + final { + $$->a.base = $1->r; + }, + emit { + $$->rtl = gen_rtx_REG(SImode, $1->r); + }; +#line 319 "x86-64.misc.py" +index64 : r64 [0, 1] +#line 325 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1; + }, + costs { + forgettable($1->r); + }, + final { + $$->a.index = $1->r; + }, + emit { + $$->rtl = gen_rtx_REG(DImode, $1->r); + }; +#line 320 "x86-64.misc.py" +index32 : r32 [0, 1] +#line 325 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1; + }, + costs { + forgettable($1->r); + }, + final { + $$->a.index = $1->r; + }, + emit { + $$->rtl = gen_rtx_REG(SImode, $1->r); + }; +#line 321 "x86-64.misc.py" +index16 : r16 [0, 1] +#line 325 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1; + }, + costs { + forgettable($1->r); + }, + final { + $$->a.index = $1->r; + }, + emit { + $$->rtl = gen_rtx_REG(SImode, $1->r); + }; +#line 322 "x86-64.misc.py" +index8 : r8 [0, 1] +#line 325 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1; + }, + costs { + forgettable($1->r); + }, + final { + $$->a.index = $1->r; + }, + emit { + $$->rtl = gen_rtx_REG(SImode, $1->r); + }; +#line 343 "x86-64.misc.py" +index64 : ASHIFT_DI(r64, scon) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(DImode, + gen_rtx_REG(DImode, $1->r), + GEN_INT(1 ? (1 << $2->val) : $2->val)); + }; +#line 344 "x86-64.misc.py" +index32 : ASHIFT_SI(r32, scon) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(SImode, + gen_rtx_REG(SImode, $1->r), + GEN_INT(1 ? (1 << $2->val) : $2->val)); + }; +#line 345 "x86-64.misc.py" +index16 : ASHIFT_HI(r16, scon) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(HImode, + gen_rtx_REG(HImode, $1->r), + GEN_INT(1 ? (1 << $2->val) : $2->val)); + }; +#line 346 "x86-64.misc.py" +index8 : ASHIFT_QI(r8, scon) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(QImode, + gen_rtx_REG(QImode, $1->r), + GEN_INT(1 ? (1 << $2->val) : $2->val)); + }; +#line 348 "x86-64.misc.py" +index64 : MULT_DI(r64 | mcon) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 0 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(DImode, + gen_rtx_REG(DImode, $1->r), + GEN_INT(0 ? (1 << $2->val) : $2->val)); + }; +#line 349 "x86-64.misc.py" +index32 : MULT_SI(r32 | mcon) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 0 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(SImode, + gen_rtx_REG(SImode, $1->r), + GEN_INT(0 ? (1 << $2->val) : $2->val)); + }; +#line 350 "x86-64.misc.py" +index16 : MULT_HI(r16 | mcon) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 0 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(HImode, + gen_rtx_REG(HImode, $1->r), + GEN_INT(0 ? (1 << $2->val) : $2->val)); + }; +#line 351 "x86-64.misc.py" +index8 : MULT_QI(r8 | mcon) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 0 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(QImode, + gen_rtx_REG(QImode, $1->r), + GEN_INT(0 ? (1 << $2->val) : $2->val)); + }; +#line 353 "x86-64.misc.py" +index16 : SUBREG_HI(ASHIFT_SI(SIGN_EXTEND_SI(r16), scon), CONST_0) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(HImode, + gen_rtx_REG(HImode, $1->r), + GEN_INT(1 ? (1 << $2->val) : $2->val)); + }; +#line 354 "x86-64.misc.py" +index16 : SUBREG_HI(ASHIFT_SI(ZERO_EXTEND_SI(r16), scon), CONST_0) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(HImode, + gen_rtx_REG(HImode, $1->r), + GEN_INT(1 ? (1 << $2->val) : $2->val)); + }; +#line 355 "x86-64.misc.py" +index8 : SUBREG_QI(ASHIFT_SI(SIGN_EXTEND_SI(r8), scon), CONST_0) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(QImode, + gen_rtx_REG(QImode, $1->r), + GEN_INT(1 ? (1 << $2->val) : $2->val)); + }; +#line 356 "x86-64.misc.py" +index8 : SUBREG_QI(ASHIFT_SI(ZERO_EXTEND_SI(r8), scon), CONST_0) [0, 1] +#line 360 "x86-64.misc.py" + names { + $$->a.index = $1->r; + $$->a.scale = 1 ? (1 << $2->val) : $2->val; + }, + final { + $$->a.index = $1->r; + }, + costs { + forgettable($1->r); + }, + supairs { + $$->extra = $1->extra; + $$->freed = $1->freed; + }, + emit { + $$->rtl = gen_rtx_MULT(QImode, + gen_rtx_REG(QImode, $1->r), + GEN_INT(1 ? (1 << $2->val) : $2->val)); + }; +#line 387 "x86-64.misc.py" +scon : CONST_0 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 388 "x86-64.misc.py" +scon : CONST_P1 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 389 "x86-64.misc.py" +scon : CONST_P2 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 390 "x86-64.misc.py" +scon : CONST_P3 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 392 "x86-64.misc.py" +mcon : CONST_P1 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 393 "x86-64.misc.py" +mcon : CONST_P2 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 394 "x86-64.misc.py" +mcon : CONST_P4 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 395 "x86-64.misc.py" +mcon : CONST_P8 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 397 "x86-64.misc.py" +imm4 : CONST_N1 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 398 "x86-64.misc.py" +imm4 : CONST_0 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 399 "x86-64.misc.py" +imm4 : CONST_P1 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 400 "x86-64.misc.py" +imm4 : CONST_P2 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 401 "x86-64.misc.py" +imm4 : CONST_P3 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 402 "x86-64.misc.py" +imm4 : CONST_P4 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 403 "x86-64.misc.py" +imm4 : CONST4P [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 404 "x86-64.misc.py" +imm4 : CONST4N [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 406 "x86-64.misc.py" +imm5 : imm4 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 407 "x86-64.misc.py" +imm5 : CONST_P8 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 408 "x86-64.misc.py" +imm5 : CONST_P15 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 409 "x86-64.misc.py" +imm5 : CONST5P [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 410 "x86-64.misc.py" +imm5 : CONST5N [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 412 "x86-64.misc.py" +imm6 : imm5 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 413 "x86-64.misc.py" +imm5 : CONST_P16 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 414 "x86-64.misc.py" +imm5 : CONST_P24 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 415 "x86-64.misc.py" +imm5 : CONST_P31 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 416 "x86-64.misc.py" +imm6 : CONST_P32 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 417 "x86-64.misc.py" +imm6 : CONST6P [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 418 "x86-64.misc.py" +imm6 : CONST6N [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 420 "x86-64.misc.py" +imm7 : imm6 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 421 "x86-64.misc.py" +imm6 : CONST_P48 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 422 "x86-64.misc.py" +imm6 : CONST_P56 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 423 "x86-64.misc.py" +imm6 : CONST_P63 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 424 "x86-64.misc.py" +imm7 : CONST7P [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 425 "x86-64.misc.py" +imm7 : CONST7N [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 427 "x86-64.misc.py" +imm8 : imm7 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 428 "x86-64.misc.py" +imm8 : CONST8P [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 429 "x86-64.misc.py" +imm8 : CONST8N [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 431 "x86-64.misc.py" +imm12 : imm8 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 432 "x86-64.misc.py" +imm12 : CONST_P255 [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 433 "x86-64.misc.py" +imm12 : CONST12P [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 434 "x86-64.misc.py" +imm12 : CONST12N [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 436 "x86-64.misc.py" +imm13 : imm12 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 437 "x86-64.misc.py" +imm13 : CONST13P [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 438 "x86-64.misc.py" +imm13 : CONST13N [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 440 "x86-64.misc.py" +imm14 : imm13 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 441 "x86-64.misc.py" +imm14 : CONST14P [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 442 "x86-64.misc.py" +imm14 : CONST14N [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 444 "x86-64.misc.py" +imm15 : imm14 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 445 "x86-64.misc.py" +imm15 : CONST15P [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 446 "x86-64.misc.py" +imm15 : CONST15N [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 448 "x86-64.misc.py" +imm16 : imm15 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 449 "x86-64.misc.py" +imm16 : CONST16P [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 450 "x86-64.misc.py" +imm16 : CONST16N [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 452 "x86-64.misc.py" +imm28 : imm16 [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 453 "x86-64.misc.py" +imm28 : CONST28P [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 454 "x86-64.misc.py" +imm28 : CONST28N [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 456 "x86-64.misc.py" +imm29 : imm28 [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 457 "x86-64.misc.py" +imm29 : CONST29P [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 458 "x86-64.misc.py" +imm29 : CONST29N [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 460 "x86-64.misc.py" +imm30 : imm29 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 461 "x86-64.misc.py" +imm30 : CONST30P [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 462 "x86-64.misc.py" +imm30 : CONST30N [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 464 "x86-64.misc.py" +imm31 : imm30 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 465 "x86-64.misc.py" +imm31 : CONST31P [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 466 "x86-64.misc.py" +imm31 : CONST31N [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 468 "x86-64.misc.py" +imm32 : pureimm32 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 469 "x86-64.misc.py" +pureimm32 : imm31 [0, 0] +#line 501 "x86-64.misc.py" + ; +#line 470 "x86-64.misc.py" +pureimm32 : CONST32P [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 471 "x86-64.misc.py" +pureimm32 : CONST32N [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 472 "x86-64.misc.py" +pureimm32 : CONSTIEEE32 [0, 8] +#line 501 "x86-64.misc.py" + ; +#line 474 "x86-64.misc.py" +imm64 : imm32 [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 475 "x86-64.misc.py" +imm64 : CONST64P [0, 8] +#line 501 "x86-64.misc.py" + ; +#line 476 "x86-64.misc.py" +imm64 : CONST64N [0, 8] +#line 501 "x86-64.misc.py" + ; +#line 477 "x86-64.misc.py" +imm64 : CONSTIEEE64 [0, 8] +#line 501 "x86-64.misc.py" + ; +#line 479 "x86-64.misc.py" +pos8 : mcon [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 480 "x86-64.misc.py" +pos8 : scon [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 481 "x86-64.misc.py" +pos8 : CONST4P [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 482 "x86-64.misc.py" +pos8 : CONST5P [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 483 "x86-64.misc.py" +pos8 : CONST6P [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 484 "x86-64.misc.py" +pos8 : CONST7P [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 485 "x86-64.misc.py" +pos8 : CONST8P [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 486 "x86-64.misc.py" +pos16 : pos8 [0, 1] +#line 501 "x86-64.misc.py" + ; +#line 487 "x86-64.misc.py" +pos16 : CONST12P [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 488 "x86-64.misc.py" +pos16 : CONST13P [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 489 "x86-64.misc.py" +pos16 : CONST14P [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 490 "x86-64.misc.py" +pos16 : CONST15P [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 491 "x86-64.misc.py" +pos16 : CONST16P [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 492 "x86-64.misc.py" +pos32 : pos16 [0, 2] +#line 501 "x86-64.misc.py" + ; +#line 493 "x86-64.misc.py" +pos32 : CONST28P [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 494 "x86-64.misc.py" +pos32 : CONST29P [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 495 "x86-64.misc.py" +pos32 : CONST30P [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 496 "x86-64.misc.py" +pos32 : CONST31P [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 497 "x86-64.misc.py" +pos32 : CONST32P [0, 4] +#line 501 "x86-64.misc.py" + ; +#line 510 "x86-64.misc.py" +symbol32 : SYMBOL_REF_32 [0, 0] +#line 514 "x86-64.misc.py" + names { + $$->a.base_rip = 1; /* %rip usage */ + }; +#line 511 "x86-64.misc.py" +symbol64 : SYMBOL_REF_64 [0, 0] +#line 514 "x86-64.misc.py" + names { + $$->a.base_rip = 1; /* %rip usage */ + }; +#line 521 "x86-64.misc.py" +symbol32 : LABEL_REF_DI [0, 0] +#line 524 "x86-64.misc.py" + names { + $$->a.base_rip = 1; /* %rip usage(?) */ + }; +#line 532 "x86-64.misc.py" +symbol : symbol32 [0, 0] +#line 536 "x86-64.misc.py" + ; +#line 533 "x86-64.misc.py" +symbol : symbol64 [0, 0] +#line 536 "x86-64.misc.py" + ; +#line 541 "x86-64.misc.py" +symbol32 : pureimm32 [0, 0] +#line 545 "x86-64.misc.py" + ; +#line 542 "x86-64.misc.py" +symbol64 : pureimm32 [0, 0] +#line 545 "x86-64.misc.py" + ; +#line 554 "x86-64.misc.py" +symbol32 : CONST_DI(symbol32) [0, 0] +#line 558 "x86-64.misc.py" + names { + $$->a.string = $1->a.string; + $$->val = $1->val; + $$->a.base_rip = 1; /* %rip usage */ + }; +#line 555 "x86-64.misc.py" +symbol64 : CONST_DI(symbol64) [0, 0] +#line 558 "x86-64.misc.py" + names { + $$->a.string = $1->a.string; + $$->val = $1->val; + $$->a.base_rip = 1; /* %rip usage */ + }; +#line 567 "x86-64.misc.py" +symbol32 : PLUS_DI(symbol32 | pureimm32) [0, 0] +#line 571 "x86-64.misc.py" + names { + $$->a.string = $1->a.string; + $$->val = $1->val + $2->val; + $$->a.base_rip = 1; /* %rip usage */ + }; +#line 568 "x86-64.misc.py" +symbol64 : PLUS_DI(symbol64 | pureimm32) [0, 0] +#line 571 "x86-64.misc.py" + names { + $$->a.string = $1->a.string; + $$->val = $1->val + $2->val; + $$->a.base_rip = 1; /* %rip usage */ + }; +#line 580 "x86-64.misc.py" +symbol32 : MINUS_DI(symbol32, pureimm32) [0, 0] +#line 584 "x86-64.misc.py" + names { + $$->a.string = $1->a.string; + $$->val = $1->val - $2->val; + $$->a.base_rip = 1; /* %rip usage */ + }; +#line 581 "x86-64.misc.py" +symbol64 : MINUS_DI(symbol64, pureimm32) [0, 0] +#line 584 "x86-64.misc.py" + names { + $$->a.string = $1->a.string; + $$->val = $1->val - $2->val; + $$->a.base_rip = 1; /* %rip usage */ + }; +#line 593 "x86-64.misc.py" +imm32 : symbol32 [0, 4] +#line 597 "x86-64.misc.py" + names { + /* this transfers the "a" attribute from src to dst */ + } + ; +#line 594 "x86-64.misc.py" +imm64 : symbol64 [0, 8] +#line 597 "x86-64.misc.py" + names { + /* this transfers the "a" attribute from src to dst */ + } + ; +#line 624 "x86-64.misc.py" +label : LABEL_REF_DI [0, 0] +#line 627 "x86-64.misc.py" + ; +#line 636 "x86-64.misc.py" +stmt : SET_ALL(PC_ALL, label) [0, 0] +#line 639 "x86-64.misc.py" + debug { + dump_jump("jmp", $1); + }, + emit { + rtx label = XEXP ($1->rtl, 0); + rtx new_jump = emit_jump_insn (gen_jump (label)); + LABEL_NUSES (label) += 1; + JUMP_LABEL (new_jump) = label; + }; +#line 656 "x86-64.misc.py" +stmt : PARALLEL_ALL(SET_ALL(PC_ALL, r64), USE_ALL(label)) [0, 0] +#line 659 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dump_jumpR("jmp", $1->r, 'q'); + }, + emit { + rtx label = XEXP ($2->rtl, 0); + rtx new_jump = emit_jump_insn( + gen_rtx_PARALLEL(VOIDmode, + gen_rtvec(2, + gen_rtx_SET(VOIDmode, + gen_rtx_PC(VOIDmode), + gen_rtx_REG(DImode, $1->r)), + gen_rtx_USE(VOIDmode, + $2->rtl)))); + LABEL_NUSES (label) += 1; + JUMP_LABEL (new_jump) = label; + }; +#line 746 "x86-64.misc.py" +stmt : SET_ALL(PC_ALL, COND_MOVE(condition, PAIR_ALL(label, PC_ALL))) [0, 0] +#line 749 "x86-64.misc.py" + debug { + const enum rtx_code code = $1->code; + switch (code) { + case UNEQ: /* unordered equality testing */ + dump_jump("je", $2); + dump_jump("jp", $2); /* jump if unordered */ + break; + case LTGT: /* unordered inequality testing */ + dump_jump("jne", $2); + dump_jump("jp", $2); /* jump if unordered */ + break; + case UNGE: dump_jump("jae", $2); break; + case UNGT: dump_jump("ja", $2); break; + case UNLE: dump_jump("jbe", $2); break; + case UNLT: dump_jump("jb", $2); break; + case UNORDERED: dump_jump("jp", $2); break; + case ORDERED: dump_jump("jnp", $2); break; + + case EQ: dump_jump("je", $2); break; + case NE: dump_jump("jne", $2); break; + case GE: dump_jump("jge", $2); break; + case GT: dump_jump("jg", $2); break; + case LE: dump_jump("jle", $2); break; + case LT: dump_jump("jl", $2); break; + + case GEU: dump_jump("jae", $2); break; + case GTU: dump_jump("ja", $2); break; + case LEU: dump_jump("jbe", $2); break; + case LTU: dump_jump("jb", $2); break; + + default: + icg_nyi("unrecognized condition code %d for jump", code); + } + }; +#line 794 "x86-64.misc.py" +r64x : COND_MOVE(condition, PAIR_ALL(r64x, r64)) [1, 4] +#line 801 "x86-64.misc.py" + names { + $$->rx = $2->rx; + if (1) { + /* + * set the order the children are visited; + * when su ordering is working, this will force a Sethi-Ullman traversal. + */ + p->perm[0] = 1; + p->perm[1] = 2; + p->perm[2] = 0; /* ensuring that condition is evaluated last */ + } + }, + final { + $$->rx = $2->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + sparseset_set_bit(live, find($3->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->rx); + memorable($3->r); + }, + debug { + const enum rtx_code code = $1->code; + switch (code) { + /* + * NOTE A: + * There is empirical evidence suggesting that the conditions and the cmov opcodes + * must be inverted relative to each other. This will make the icg+asm + * path produce identical asm code to the icg+rtl path. + * 03Nov08: After 4 hours of searching, rrh does not have an explanation for this. + * Alternatively, try swapping the fsrc and tsrc args to gen_rtx_IF_THEN_ELSE + * perhaps this is because of the evaluation permutation that is induced? + * By swapping fsrc and tsrc to the gen_rtx_IF_THEN_ELSE + * we get identical code icg+asm and icg+rtl. + */ + case EQ: dumpRR("cmove", $3->r, 'q', $$->rx, 'q'); break; + case NE: dumpRR("cmovne", $3->r, 'q', $$->rx, 'q'); break; + case GE: dumpRR("cmovge", $3->r, 'q', $$->rx, 'q'); break; + case GT: dumpRR("cmovg", $3->r, 'q', $$->rx, 'q'); break; + case LE: dumpRR("cmovle", $3->r, 'q', $$->rx, 'q'); break; + case LT: dumpRR("cmovl", $3->r, 'q', $$->rx, 'q'); break; + case GEU: dumpRR("cmovae", $3->r, 'q', $$->rx, 'q'); break; + case GTU: dumpRR("cmova", $3->r, 'q', $$->rx, 'q'); break; + case LEU: dumpRR("cmovbe", $3->r, 'q', $$->rx, 'q'); break; + case LTU: dumpRR("cmovb", $3->r, 'q', $$->rx, 'q'); break; + case UNLE: dumpRR("cmovbe", $3->r, 'q', $$->rx, 'q'); break; + default: + icg_nyi("unrecognized condition code %d for cmov", code); + } + }, + emit { + rtx cond, src; + rtx tsrc = gen_rtx_REG(DImode, $2->rx); + rtx fsrc = gen_rtx_REG(DImode, $3->r); + rtx dst = tsrc; + const enum rtx_code code = $1->code; + switch (code) { + case EQ: cond = gen_rtx_EQ (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case NE: cond = gen_rtx_NE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GE: cond = gen_rtx_GE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GT: cond = gen_rtx_GT (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LE: cond = gen_rtx_LE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LT: cond = gen_rtx_LT (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GEU: cond = gen_rtx_GEU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GTU: cond = gen_rtx_GTU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LEU: cond = gen_rtx_LEU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LTU: cond = gen_rtx_LTU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case UNLE: cond = gen_rtx_UNLE(VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + default: + icg_nyi("unrecognized condition code %d for cmov", code); + } + src = gen_rtx_IF_THEN_ELSE(DImode, cond, tsrc, fsrc); + icg_emit_plain(gen_rtx_SET(VOIDmode, dst, src)); + }; +#line 795 "x86-64.misc.py" +r32x : COND_MOVE(condition, PAIR_ALL(r32x, r32)) [1, 3] +#line 801 "x86-64.misc.py" + names { + $$->rx = $2->rx; + if (1) { + /* + * set the order the children are visited; + * when su ordering is working, this will force a Sethi-Ullman traversal. + */ + p->perm[0] = 1; + p->perm[1] = 2; + p->perm[2] = 0; /* ensuring that condition is evaluated last */ + } + }, + final { + $$->rx = $2->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + sparseset_set_bit(live, find($3->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->rx); + memorable($3->r); + }, + debug { + const enum rtx_code code = $1->code; + switch (code) { + /* + * NOTE A: + * There is empirical evidence suggesting that the conditions and the cmov opcodes + * must be inverted relative to each other. This will make the icg+asm + * path produce identical asm code to the icg+rtl path. + * 03Nov08: After 4 hours of searching, rrh does not have an explanation for this. + * Alternatively, try swapping the fsrc and tsrc args to gen_rtx_IF_THEN_ELSE + * perhaps this is because of the evaluation permutation that is induced? + * By swapping fsrc and tsrc to the gen_rtx_IF_THEN_ELSE + * we get identical code icg+asm and icg+rtl. + */ + case EQ: dumpRR("cmove", $3->r, 'd', $$->rx, 'd'); break; + case NE: dumpRR("cmovne", $3->r, 'd', $$->rx, 'd'); break; + case GE: dumpRR("cmovge", $3->r, 'd', $$->rx, 'd'); break; + case GT: dumpRR("cmovg", $3->r, 'd', $$->rx, 'd'); break; + case LE: dumpRR("cmovle", $3->r, 'd', $$->rx, 'd'); break; + case LT: dumpRR("cmovl", $3->r, 'd', $$->rx, 'd'); break; + case GEU: dumpRR("cmovae", $3->r, 'd', $$->rx, 'd'); break; + case GTU: dumpRR("cmova", $3->r, 'd', $$->rx, 'd'); break; + case LEU: dumpRR("cmovbe", $3->r, 'd', $$->rx, 'd'); break; + case LTU: dumpRR("cmovb", $3->r, 'd', $$->rx, 'd'); break; + case UNLE: dumpRR("cmovbe", $3->r, 'd', $$->rx, 'd'); break; + default: + icg_nyi("unrecognized condition code %d for cmov", code); + } + }, + emit { + rtx cond, src; + rtx tsrc = gen_rtx_REG(SImode, $2->rx); + rtx fsrc = gen_rtx_REG(SImode, $3->r); + rtx dst = tsrc; + const enum rtx_code code = $1->code; + switch (code) { + case EQ: cond = gen_rtx_EQ (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case NE: cond = gen_rtx_NE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GE: cond = gen_rtx_GE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GT: cond = gen_rtx_GT (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LE: cond = gen_rtx_LE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LT: cond = gen_rtx_LT (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GEU: cond = gen_rtx_GEU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GTU: cond = gen_rtx_GTU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LEU: cond = gen_rtx_LEU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LTU: cond = gen_rtx_LTU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case UNLE: cond = gen_rtx_UNLE(VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + default: + icg_nyi("unrecognized condition code %d for cmov", code); + } + src = gen_rtx_IF_THEN_ELSE(SImode, cond, tsrc, fsrc); + icg_emit_plain(gen_rtx_SET(VOIDmode, dst, src)); + }; +#line 796 "x86-64.misc.py" +r16x : COND_MOVE(condition, PAIR_ALL(r16x, r16)) [1, 3] +#line 801 "x86-64.misc.py" + names { + $$->rx = $2->rx; + if (1) { + /* + * set the order the children are visited; + * when su ordering is working, this will force a Sethi-Ullman traversal. + */ + p->perm[0] = 1; + p->perm[1] = 2; + p->perm[2] = 0; /* ensuring that condition is evaluated last */ + } + }, + final { + $$->rx = $2->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + sparseset_set_bit(live, find($3->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->rx); + memorable($3->r); + }, + debug { + const enum rtx_code code = $1->code; + switch (code) { + /* + * NOTE A: + * There is empirical evidence suggesting that the conditions and the cmov opcodes + * must be inverted relative to each other. This will make the icg+asm + * path produce identical asm code to the icg+rtl path. + * 03Nov08: After 4 hours of searching, rrh does not have an explanation for this. + * Alternatively, try swapping the fsrc and tsrc args to gen_rtx_IF_THEN_ELSE + * perhaps this is because of the evaluation permutation that is induced? + * By swapping fsrc and tsrc to the gen_rtx_IF_THEN_ELSE + * we get identical code icg+asm and icg+rtl. + */ + case EQ: dumpRR("cmove", $3->r, 'd', $$->rx, 'd'); break; + case NE: dumpRR("cmovne", $3->r, 'd', $$->rx, 'd'); break; + case GE: dumpRR("cmovge", $3->r, 'd', $$->rx, 'd'); break; + case GT: dumpRR("cmovg", $3->r, 'd', $$->rx, 'd'); break; + case LE: dumpRR("cmovle", $3->r, 'd', $$->rx, 'd'); break; + case LT: dumpRR("cmovl", $3->r, 'd', $$->rx, 'd'); break; + case GEU: dumpRR("cmovae", $3->r, 'd', $$->rx, 'd'); break; + case GTU: dumpRR("cmova", $3->r, 'd', $$->rx, 'd'); break; + case LEU: dumpRR("cmovbe", $3->r, 'd', $$->rx, 'd'); break; + case LTU: dumpRR("cmovb", $3->r, 'd', $$->rx, 'd'); break; + case UNLE: dumpRR("cmovbe", $3->r, 'd', $$->rx, 'd'); break; + default: + icg_nyi("unrecognized condition code %d for cmov", code); + } + }, + emit { + rtx cond, src; + rtx tsrc = gen_rtx_REG(SImode, $2->rx); + rtx fsrc = gen_rtx_REG(SImode, $3->r); + rtx dst = tsrc; + const enum rtx_code code = $1->code; + switch (code) { + case EQ: cond = gen_rtx_EQ (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case NE: cond = gen_rtx_NE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GE: cond = gen_rtx_GE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GT: cond = gen_rtx_GT (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LE: cond = gen_rtx_LE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LT: cond = gen_rtx_LT (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GEU: cond = gen_rtx_GEU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GTU: cond = gen_rtx_GTU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LEU: cond = gen_rtx_LEU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LTU: cond = gen_rtx_LTU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case UNLE: cond = gen_rtx_UNLE(VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + default: + icg_nyi("unrecognized condition code %d for cmov", code); + } + src = gen_rtx_IF_THEN_ELSE(SImode, cond, tsrc, fsrc); + icg_emit_plain(gen_rtx_SET(VOIDmode, dst, src)); + }; +#line 797 "x86-64.misc.py" +r8x : COND_MOVE(condition, PAIR_ALL(r8x, r8)) [1, 3] +#line 801 "x86-64.misc.py" + names { + $$->rx = $2->rx; + if (1) { + /* + * set the order the children are visited; + * when su ordering is working, this will force a Sethi-Ullman traversal. + */ + p->perm[0] = 1; + p->perm[1] = 2; + p->perm[2] = 0; /* ensuring that condition is evaluated last */ + } + }, + final { + $$->rx = $2->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + sparseset_set_bit(live, find($3->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->rx); + memorable($3->r); + }, + debug { + const enum rtx_code code = $1->code; + switch (code) { + /* + * NOTE A: + * There is empirical evidence suggesting that the conditions and the cmov opcodes + * must be inverted relative to each other. This will make the icg+asm + * path produce identical asm code to the icg+rtl path. + * 03Nov08: After 4 hours of searching, rrh does not have an explanation for this. + * Alternatively, try swapping the fsrc and tsrc args to gen_rtx_IF_THEN_ELSE + * perhaps this is because of the evaluation permutation that is induced? + * By swapping fsrc and tsrc to the gen_rtx_IF_THEN_ELSE + * we get identical code icg+asm and icg+rtl. + */ + case EQ: dumpRR("cmove", $3->r, 'd', $$->rx, 'd'); break; + case NE: dumpRR("cmovne", $3->r, 'd', $$->rx, 'd'); break; + case GE: dumpRR("cmovge", $3->r, 'd', $$->rx, 'd'); break; + case GT: dumpRR("cmovg", $3->r, 'd', $$->rx, 'd'); break; + case LE: dumpRR("cmovle", $3->r, 'd', $$->rx, 'd'); break; + case LT: dumpRR("cmovl", $3->r, 'd', $$->rx, 'd'); break; + case GEU: dumpRR("cmovae", $3->r, 'd', $$->rx, 'd'); break; + case GTU: dumpRR("cmova", $3->r, 'd', $$->rx, 'd'); break; + case LEU: dumpRR("cmovbe", $3->r, 'd', $$->rx, 'd'); break; + case LTU: dumpRR("cmovb", $3->r, 'd', $$->rx, 'd'); break; + case UNLE: dumpRR("cmovbe", $3->r, 'd', $$->rx, 'd'); break; + default: + icg_nyi("unrecognized condition code %d for cmov", code); + } + }, + emit { + rtx cond, src; + rtx tsrc = gen_rtx_REG(SImode, $2->rx); + rtx fsrc = gen_rtx_REG(SImode, $3->r); + rtx dst = tsrc; + const enum rtx_code code = $1->code; + switch (code) { + case EQ: cond = gen_rtx_EQ (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case NE: cond = gen_rtx_NE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GE: cond = gen_rtx_GE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GT: cond = gen_rtx_GT (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LE: cond = gen_rtx_LE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LT: cond = gen_rtx_LT (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GEU: cond = gen_rtx_GEU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GTU: cond = gen_rtx_GTU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LEU: cond = gen_rtx_LEU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LTU: cond = gen_rtx_LTU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case UNLE: cond = gen_rtx_UNLE(VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + default: + icg_nyi("unrecognized condition code %d for cmov", code); + } + src = gen_rtx_IF_THEN_ELSE(SImode, cond, tsrc, fsrc); + icg_emit_plain(gen_rtx_SET(VOIDmode, dst, src)); + }; +#line 891 "x86-64.misc.py" +r64x : COND_MOVE(condition, PAIR_ALL(r64x, MEM_DI(addr))) [4, 3] +#line 897 "x86-64.misc.py" + names { + $$->rx = $2->rx; + p->perm[0] = 1; + p->perm[1] = 2; + p->perm[2] = 0; /* ensuring that condition is evaluated last */ + }, + final { + $$->rx = $2->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + add_addr(live, $3); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->rx); + }, + debug { + const enum rtx_code code = $1->code; + switch (code) { + /* + * See + * NOTE A + * above + */ + case EQ: dumpMR("cmove", $3, $$->rx, 'q'); break; + case NE: dumpMR("cmovne", $3, $$->rx, 'q'); break; + case GE: dumpMR("cmovge", $3, $$->rx, 'q'); break; + case GT: dumpMR("cmovg", $3, $$->rx, 'q'); break; + case LE: dumpMR("cmovle", $3, $$->rx, 'q'); break; + case LT: dumpMR("cmovl", $3, $$->rx, 'q'); break; + case GEU: dumpMR("cmovae", $3, $$->rx, 'q'); break; + case GTU: dumpMR("cmova", $3, $$->rx, 'q'); break; + case LEU: dumpMR("cmovbe", $3, $$->rx, 'q'); break; + case LTU: dumpMR("cmovb", $3, $$->rx, 'q'); break; + case UNLE: dumpMR("cmovbe", $3, $$->rx, 'q'); break; + default: + icg_nyi("unrecognized condition code %d for cmov", code); + } + }, + emit { + rtx cond, src; + rtx tsrc = gen_rtx_REG(DImode, $2->rx); + rtx fsrc = gen_rtx_MEM(DImode, $3->rtl); + rtx dst = tsrc; + const enum rtx_code code = $1->code; + switch (code) { + case EQ: cond = gen_rtx_EQ (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case NE: cond = gen_rtx_NE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GE: cond = gen_rtx_GE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GT: cond = gen_rtx_GT (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LE: cond = gen_rtx_LE (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LT: cond = gen_rtx_LT (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GEU: cond = gen_rtx_GEU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GTU: cond = gen_rtx_GTU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LEU: cond = gen_rtx_LEU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LTU: cond = gen_rtx_LTU (VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case UNLE: cond = gen_rtx_UNLE(VOIDmode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + default: + icg_nyi("unrecognized condition code %d for cmov", code); + } + src = gen_rtx_IF_THEN_ELSE(DImode, cond, tsrc, fsrc); + icg_emit_plain(gen_rtx_SET(VOIDmode, dst, src)); + }; +#line 976 "x86-64.misc.py" +r8x : condition [1, 3] +#line 979 "x86-64.misc.py" + names { + $$->rx = new_reg(); + }, + kinds { + icg_reg_vector[$$->rx].kind = INT_REGISTER; + }, + build { + unsigned rd = find($$->rx); + sparseset_clear_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + final { + $$->rx = icg_reg_vector[find($$->rx)].color; + }, + debug { + const enum rtx_code code = $1->code; + const enum machine_mode cc_code = $1->cc_code; + switch (code) { + case EQ: dumpR("sete", $$->rx, 'b'); break; + case NE: dumpR("setne", $$->rx, 'b'); break; + case GE: dumpR(cc_code == CCFPUmode ? "setae" : "setge", $$->rx, 'b'); break; + case GT: dumpR(cc_code == CCFPUmode ? "seta" : "setg", $$->rx, 'b'); break; + case LE: dumpR(cc_code == CCFPUmode ? "setbe" : "setle", $$->rx, 'b'); break; + case LT: dumpR(cc_code == CCFPUmode ? "setb" : "setl", $$->rx, 'b'); break; + + case GEU: dumpR("setae", $$->rx, 'b'); break; + case GTU: dumpR("seta", $$->rx, 'b'); break; + case LEU: dumpR("setbe", $$->rx, 'b'); break; + case LTU: dumpR("setb", $$->rx, 'b'); break; + + /* + * UNEQ (unordered ==) and LTGT (unordered !=) are problematic + * LTGT in flow context will generate 2 conditional jumps, + * one for jne and the other jp (jump unordered) + * Empirically, when we see LTGT in value context it + * is as a child of an IOR, where the other child + * is a test of UNORDERED, so we can just handle the jne case here. + */ + case UNEQ: dumpR("sete", $$->rx, 'b'); break; + case LTGT: dumpR("setne", $$->rx, 'b'); break; + + case UNGE: dumpR("setae", $$->rx, 'b'); break; + case UNGT: dumpR("seta", $$->rx, 'b'); break; + case UNLE: dumpR("setbe", $$->rx, 'b'); break; + case UNLT: dumpR("setb", $$->rx, 'b'); break; + case UNORDERED: dumpR("setp", $$->rx, 'b'); break; + case ORDERED: dumpR("setnp", $$->rx, 'b'); break; + + default: + icg_nyi("unrecognized condition code %d for set", code); + } + }, + emit { + rtx src; + rtx dst = gen_rtx_REG(QImode, $$->rx); + const enum rtx_code code = $1->code; + switch (code) { + case EQ: src = gen_rtx_EQ (QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case NE: src = gen_rtx_NE (QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GE: src = gen_rtx_GE (QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GT: src = gen_rtx_GT (QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LE: src = gen_rtx_LE (QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LT: src = gen_rtx_LT (QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + + case GEU: src = gen_rtx_GEU(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case GTU: src = gen_rtx_GTU(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LEU: src = gen_rtx_LEU(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LTU: src = gen_rtx_LTU(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + + case UNEQ: src = gen_rtx_UNEQ(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case LTGT: src = gen_rtx_LTGT(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case UNGE: src = gen_rtx_UNGE(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case UNGT: src = gen_rtx_UNGT(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case UNLE: src = gen_rtx_UNLE(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case UNLT: src = gen_rtx_UNLT(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case UNORDERED: src = gen_rtx_UNORDERED(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + case ORDERED: src = gen_rtx_ORDERED(QImode, gen_rtx_REG($1->cc_code, REG_CC), GEN_INT(0)); break; + + default: + icg_nyi("unrecognized condition code %d for set", code); + } + icg_emit_plain(gen_rtx_SET(VOIDmode, dst, src)); + }; +#line 1069 "x86-64.misc.py" +stmt : SET_ALL(MEM_QI(addr), condition) [3, 2] +#line 1072 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + const enum rtx_code code = $2->code; + const enum machine_mode cc_code = $2->cc_code; + switch (code) { + case EQ: dumpM("sete", $1); break; + case NE: dumpM("setne", $1); break; + case GE: dumpM(cc_code == CCFPUmode ? "setae" : "setge", $1); break; + case GT: dumpM(cc_code == CCFPUmode ? "seta" : "setg", $1); break; + case LE: dumpM(cc_code == CCFPUmode ? "setbe" : "setle", $1); break; + case LT: dumpM(cc_code == CCFPUmode ? "setb" : "setl", $1); break; + + case GEU: dumpM("setae", $1); break; + case GTU: dumpM("seta", $1); break; + case LEU: dumpM("setbe", $1); break; + case LTU: dumpM("setb", $1); break; + + case UNEQ: dumpM("sete", $1); break; + case LTGT: dumpM("setne", $1); break; + case UNGE: dumpM("setae", $1); break; + case UNGT: dumpM("seta", $1); break; + case UNLE: dumpM("setbe", $1); break; + case UNLT: dumpM("setb", $1); break; + case UNORDERED: dumpM("setp", $1); break; + case ORDERED: dumpM("setnp", $1); break; + + default: + icg_nyi("unrecognized condition code %d for set", code); + } + }, + emit { + rtx src; + rtx dst = gen_rtx_MEM(QImode, $1->rtl); + const enum rtx_code code = $2->code; + switch (code) { + case EQ: src = gen_rtx_EQ (QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case NE: src = gen_rtx_NE (QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case GE: src = gen_rtx_GE (QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case GT: src = gen_rtx_GT (QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case LE: src = gen_rtx_LE (QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case LT: src = gen_rtx_LT (QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + + case GEU: src = gen_rtx_GEU(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case GTU: src = gen_rtx_GTU(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case LEU: src = gen_rtx_LEU(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case LTU: src = gen_rtx_LTU(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + + case UNEQ: src = gen_rtx_UNEQ(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case LTGT: src = gen_rtx_LTGT(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case UNGE: src = gen_rtx_UNGE(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case UNGT: src = gen_rtx_UNGT(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case UNLE: src = gen_rtx_UNLE(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case UNLT: src = gen_rtx_UNLT(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case UNORDERED: src = gen_rtx_UNORDERED(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + case ORDERED: src = gen_rtx_ORDERED(QImode, gen_rtx_REG($2->cc_code, REG_CC), GEN_INT(0)); break; + + default: + icg_nyi("unrecognized condition code %d for set", code); + } + icg_emit_plain(gen_rtx_SET(VOIDmode, dst, src)); + }; +#line 1152 "x86-64.misc.py" +r64x : PLUS_DI(r64x | NEG_DI(PLUS_DI(LTU_ALL(rcc, CONST_0), CONST_N1))) [1, 4] +#line 1164 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("sbbq", $$->rx, 'q'); + }, + emit { + rtx ltu = gen_rtx_LTU(DImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus = gen_rtx_PLUS(DImode, ltu, GEN_INT(-1)); + rtx minus = gen_rtx_MINUS(DImode, gen_rtx_REG(DImode, $1->rx), plus); + rtx dst = gen_rtx_REG(DImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, minus)); + }; +#line 1153 "x86-64.misc.py" +r32x : PLUS_SI(r32x | NEG_SI(PLUS_SI(LTU_ALL(rcc, CONST_0), CONST_N1))) [1, 3] +#line 1164 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("sbbl", $$->rx, 'd'); + }, + emit { + rtx ltu = gen_rtx_LTU(SImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus = gen_rtx_PLUS(SImode, ltu, GEN_INT(-1)); + rtx minus = gen_rtx_MINUS(SImode, gen_rtx_REG(SImode, $1->rx), plus); + rtx dst = gen_rtx_REG(SImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, minus)); + }; +#line 1154 "x86-64.misc.py" +r16x : PLUS_HI(r16x | NEG_HI(PLUS_HI(LTU_ALL(rcc, CONST_0), CONST_N1))) [1, 4] +#line 1164 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("sbbw", $$->rx, 'w'); + }, + emit { + rtx ltu = gen_rtx_LTU(HImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus = gen_rtx_PLUS(HImode, ltu, GEN_INT(-1)); + rtx minus = gen_rtx_MINUS(HImode, gen_rtx_REG(HImode, $1->rx), plus); + rtx dst = gen_rtx_REG(HImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, minus)); + }; +#line 1155 "x86-64.misc.py" +r8x : PLUS_QI(r8x | NEG_QI(PLUS_QI(LTU_ALL(rcc, CONST_0), CONST_N1))) [1, 4] +#line 1164 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("sbbb", $$->rx, 'b'); + }, + emit { + rtx ltu = gen_rtx_LTU(QImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus = gen_rtx_PLUS(QImode, ltu, GEN_INT(-1)); + rtx minus = gen_rtx_MINUS(QImode, gen_rtx_REG(QImode, $1->rx), plus); + rtx dst = gen_rtx_REG(QImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, minus)); + }; +#line 1157 "x86-64.misc.py" +r64x : PLUS_DI(r64x | NEG_DI(PLUS_DI(LTU_ALL(rcc, CONST_0), CONST_0))) [1, 4] +#line 1164 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("sbbq", $$->rx, 'q'); + }, + emit { + rtx ltu = gen_rtx_LTU(DImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus = gen_rtx_PLUS(DImode, ltu, GEN_INT(0)); + rtx minus = gen_rtx_MINUS(DImode, gen_rtx_REG(DImode, $1->rx), plus); + rtx dst = gen_rtx_REG(DImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, minus)); + }; +#line 1158 "x86-64.misc.py" +r32x : PLUS_SI(r32x | NEG_SI(PLUS_SI(LTU_ALL(rcc, CONST_0), CONST_0))) [1, 3] +#line 1164 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("sbbl", $$->rx, 'd'); + }, + emit { + rtx ltu = gen_rtx_LTU(SImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus = gen_rtx_PLUS(SImode, ltu, GEN_INT(0)); + rtx minus = gen_rtx_MINUS(SImode, gen_rtx_REG(SImode, $1->rx), plus); + rtx dst = gen_rtx_REG(SImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, minus)); + }; +#line 1159 "x86-64.misc.py" +r16x : PLUS_HI(r16x | NEG_HI(PLUS_HI(LTU_ALL(rcc, CONST_0), CONST_0))) [1, 4] +#line 1164 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("sbbw", $$->rx, 'w'); + }, + emit { + rtx ltu = gen_rtx_LTU(HImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus = gen_rtx_PLUS(HImode, ltu, GEN_INT(0)); + rtx minus = gen_rtx_MINUS(HImode, gen_rtx_REG(HImode, $1->rx), plus); + rtx dst = gen_rtx_REG(HImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, minus)); + }; +#line 1160 "x86-64.misc.py" +r8x : PLUS_QI(r8x | NEG_QI(PLUS_QI(LTU_ALL(rcc, CONST_0), CONST_0))) [1, 4] +#line 1164 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("sbbb", $$->rx, 'b'); + }, + emit { + rtx ltu = gen_rtx_LTU(QImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus = gen_rtx_PLUS(QImode, ltu, GEN_INT(0)); + rtx minus = gen_rtx_MINUS(QImode, gen_rtx_REG(QImode, $1->rx), plus); + rtx dst = gen_rtx_REG(QImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, minus)); + }; +#line 1196 "x86-64.misc.py" +r64x : PLUS_DI(r64x | LTU_ALL(rcc, CONST_0) | CONST_0) [1, 4] +#line 1208 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("adcq", $$->rx, 'q'); + }, + emit { + /* careflly reassemble a tree canonicalized for what the downstream ICG+RTL wants */ + rtx ltu = gen_rtx_LTU(DImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus0 = gen_rtx_PLUS(DImode, ltu, gen_rtx_REG(DImode, $1->rx)); + rtx plus1 = gen_rtx_PLUS(DImode, plus0, GEN_INT(0)); + rtx dst = gen_rtx_REG(DImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, plus1)); + }; +#line 1197 "x86-64.misc.py" +r32x : PLUS_SI(r32x | LTU_ALL(rcc, CONST_0) | CONST_0) [1, 3] +#line 1208 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("adcl", $$->rx, 'd'); + }, + emit { + /* careflly reassemble a tree canonicalized for what the downstream ICG+RTL wants */ + rtx ltu = gen_rtx_LTU(SImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus0 = gen_rtx_PLUS(SImode, ltu, gen_rtx_REG(SImode, $1->rx)); + rtx plus1 = gen_rtx_PLUS(SImode, plus0, GEN_INT(0)); + rtx dst = gen_rtx_REG(SImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, plus1)); + }; +#line 1198 "x86-64.misc.py" +r16x : PLUS_HI(r16x | LTU_ALL(rcc, CONST_0) | CONST_0) [1, 4] +#line 1208 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("adcw", $$->rx, 'w'); + }, + emit { + /* careflly reassemble a tree canonicalized for what the downstream ICG+RTL wants */ + rtx ltu = gen_rtx_LTU(HImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus0 = gen_rtx_PLUS(HImode, ltu, gen_rtx_REG(HImode, $1->rx)); + rtx plus1 = gen_rtx_PLUS(HImode, plus0, GEN_INT(0)); + rtx dst = gen_rtx_REG(HImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, plus1)); + }; +#line 1199 "x86-64.misc.py" +r8x : PLUS_QI(r8x | LTU_ALL(rcc, CONST_0) | CONST_0) [1, 4] +#line 1208 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("adcb", $$->rx, 'b'); + }, + emit { + /* careflly reassemble a tree canonicalized for what the downstream ICG+RTL wants */ + rtx ltu = gen_rtx_LTU(QImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus0 = gen_rtx_PLUS(QImode, ltu, gen_rtx_REG(QImode, $1->rx)); + rtx plus1 = gen_rtx_PLUS(QImode, plus0, GEN_INT(0)); + rtx dst = gen_rtx_REG(QImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, plus1)); + }; +#line 1201 "x86-64.misc.py" +r64x : PLUS_DI(r64x | LTU_ALL(rcc, CONST_0) | CONST_N1) [1, 4] +#line 1208 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("adcq", $$->rx, 'q'); + }, + emit { + /* careflly reassemble a tree canonicalized for what the downstream ICG+RTL wants */ + rtx ltu = gen_rtx_LTU(DImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus0 = gen_rtx_PLUS(DImode, ltu, gen_rtx_REG(DImode, $1->rx)); + rtx plus1 = gen_rtx_PLUS(DImode, plus0, GEN_INT(-1)); + rtx dst = gen_rtx_REG(DImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, plus1)); + }; +#line 1202 "x86-64.misc.py" +r32x : PLUS_SI(r32x | LTU_ALL(rcc, CONST_0) | CONST_N1) [1, 3] +#line 1208 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("adcl", $$->rx, 'd'); + }, + emit { + /* careflly reassemble a tree canonicalized for what the downstream ICG+RTL wants */ + rtx ltu = gen_rtx_LTU(SImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus0 = gen_rtx_PLUS(SImode, ltu, gen_rtx_REG(SImode, $1->rx)); + rtx plus1 = gen_rtx_PLUS(SImode, plus0, GEN_INT(-1)); + rtx dst = gen_rtx_REG(SImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, plus1)); + }; +#line 1203 "x86-64.misc.py" +r16x : PLUS_HI(r16x | LTU_ALL(rcc, CONST_0) | CONST_N1) [1, 4] +#line 1208 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("adcw", $$->rx, 'w'); + }, + emit { + /* careflly reassemble a tree canonicalized for what the downstream ICG+RTL wants */ + rtx ltu = gen_rtx_LTU(HImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus0 = gen_rtx_PLUS(HImode, ltu, gen_rtx_REG(HImode, $1->rx)); + rtx plus1 = gen_rtx_PLUS(HImode, plus0, GEN_INT(-1)); + rtx dst = gen_rtx_REG(HImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, plus1)); + }; +#line 1204 "x86-64.misc.py" +r8x : PLUS_QI(r8x | LTU_ALL(rcc, CONST_0) | CONST_N1) [1, 4] +#line 1208 "x86-64.misc.py" + names { + $$->rx = $1->rx; + }, + final { + $$->rx = $1->rx; + }, + build { + unsigned rd = find($$->rx); + sparseset_set_bit(live, rd); + add_edges(rd, live); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->rx); + }, + debug { + dumpIRm1("adcb", $$->rx, 'b'); + }, + emit { + /* careflly reassemble a tree canonicalized for what the downstream ICG+RTL wants */ + rtx ltu = gen_rtx_LTU(QImode, gen_rtx_REG(CCmode, REG_CC), GEN_INT(0)); + rtx plus0 = gen_rtx_PLUS(QImode, ltu, gen_rtx_REG(QImode, $1->rx)); + rtx plus1 = gen_rtx_PLUS(QImode, plus0, GEN_INT(-1)); + rtx dst = gen_rtx_REG(QImode, $$->rx); + icg_emit_clobber(gen_rtx_SET(VOIDmode, dst, plus1)); + }; +#line 1250 "x86-64.misc.py" +condition : EQ_ALL ( rcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = EQ; + $$->cc_code = CCmode; + }; +#line 1251 "x86-64.misc.py" +condition : NE_ALL ( rcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = NE; + $$->cc_code = CCmode; + }; +#line 1252 "x86-64.misc.py" +condition : GE_ALL ( rcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = GE; + $$->cc_code = CCmode; + }; +#line 1253 "x86-64.misc.py" +condition : GT_ALL ( rcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = GT; + $$->cc_code = CCmode; + }; +#line 1254 "x86-64.misc.py" +condition : LE_ALL ( rcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = LE; + $$->cc_code = CCmode; + }; +#line 1255 "x86-64.misc.py" +condition : LT_ALL ( rcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = LT; + $$->cc_code = CCmode; + }; +#line 1256 "x86-64.misc.py" +condition : GEU_ALL( rcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = GEU; + $$->cc_code = CCmode; + }; +#line 1257 "x86-64.misc.py" +condition : GTU_ALL( rcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = GTU; + $$->cc_code = CCmode; + }; +#line 1258 "x86-64.misc.py" +condition : LEU_ALL( rcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = LEU; + $$->cc_code = CCmode; + }; +#line 1259 "x86-64.misc.py" +condition : LTU_ALL( rcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = LTU; + $$->cc_code = CCmode; + }; +#line 1273 "x86-64.misc.py" +condition : EQ_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = EQ; + $$->cc_code = CCFPUmode; + }; +#line 1274 "x86-64.misc.py" +condition : NE_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = NE; + $$->cc_code = CCFPUmode; + }; +#line 1275 "x86-64.misc.py" +condition : GE_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = GE; + $$->cc_code = CCFPUmode; + }; +#line 1276 "x86-64.misc.py" +condition : GT_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = GT; + $$->cc_code = CCFPUmode; + }; +#line 1277 "x86-64.misc.py" +condition : LE_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = LE; + $$->cc_code = CCFPUmode; + }; +#line 1278 "x86-64.misc.py" +condition : LT_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = LT; + $$->cc_code = CCFPUmode; + }; +#line 1284 "x86-64.misc.py" +condition : UNEQ_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = UNEQ; + $$->cc_code = CCFPUmode; + }; +#line 1285 "x86-64.misc.py" +condition : UNGE_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = UNGE; + $$->cc_code = CCFPUmode; + }; +#line 1286 "x86-64.misc.py" +condition : UNGT_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = UNGT; + $$->cc_code = CCFPUmode; + }; +#line 1287 "x86-64.misc.py" +condition : UNLE_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = UNLE; + $$->cc_code = CCFPUmode; + }; +#line 1288 "x86-64.misc.py" +condition : UNLT_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = UNLT; + $$->cc_code = CCFPUmode; + }; +#line 1289 "x86-64.misc.py" +condition : LTGT_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = LTGT; + $$->cc_code = CCFPUmode; + }; +#line 1290 "x86-64.misc.py" +condition : UNORDERED_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = UNORDERED; + $$->cc_code = CCFPUmode; + }; +#line 1291 "x86-64.misc.py" +condition : ORDERED_ALL(urcc, CONST_0) [0, 0] +#line 1295 "x86-64.misc.py" + names { + $$->code = ORDERED; + $$->cc_code = CCFPUmode; + }; +#line 1343 "x86-64.misc.py" +stmt : SET_ALL(REGCCX_DI, rcc) [20, 20] +#line 1347 "x86-64.misc.py" + ; +#line 1344 "x86-64.misc.py" +stmt : SET_ALL(REGCCFPUX_DI, urcc) [20, 20] +#line 1347 "x86-64.misc.py" + ; +#line 1358 "x86-64.misc.py" +rcc : REGCCX_DI [0, 0] +#line 1371 "x86-64.misc.py" + costs { + /*forgettable($src->rx);*/ + }; +#line 1359 "x86-64.misc.py" +rcc : REGCC_DI [0, 0] +#line 1371 "x86-64.misc.py" + costs { + /*forgettable($src->rx);*/ + }; +#line 1367 "x86-64.misc.py" +urcc : REGCCFPUX_DI [0, 0] +#line 1371 "x86-64.misc.py" + costs { + /*forgettable($src->rx);*/ + }; +#line 1368 "x86-64.misc.py" +urcc : REGCCFPU_DI [0, 0] +#line 1371 "x86-64.misc.py" + costs { + /*forgettable($src->rx);*/ + }; +#line 1383 "x86-64.misc.py" +rcc : COMPARE_CC(ccr64x, CONST_0) [0, 0] +#line 1389 "x86-64.misc.py" + debug { + /* fprintf(dump_file, "; IMPLICIT USE OF PREVIOUSLY SET CONDITION CODE\n"); */ + }; +#line 1384 "x86-64.misc.py" +rcc : COMPARE_CC(ccr32x, CONST_0) [0, 0] +#line 1389 "x86-64.misc.py" + debug { + /* fprintf(dump_file, "; IMPLICIT USE OF PREVIOUSLY SET CONDITION CODE\n"); */ + }; +#line 1385 "x86-64.misc.py" +rcc : COMPARE_CC(ccr16x, CONST_0) [0, 0] +#line 1389 "x86-64.misc.py" + debug { + /* fprintf(dump_file, "; IMPLICIT USE OF PREVIOUSLY SET CONDITION CODE\n"); */ + }; +#line 1386 "x86-64.misc.py" +rcc : COMPARE_CC(ccr8x, CONST_0) [0, 0] +#line 1389 "x86-64.misc.py" + debug { + /* fprintf(dump_file, "; IMPLICIT USE OF PREVIOUSLY SET CONDITION CODE\n"); */ + }; +#line 1397 "x86-64.misc.py" +urcc : COMPARE_CC(rd, rd) [1, 3] +#line 1415 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + memorable($2->r); + }, + debug { + dumpRR("ucomisd", $2->r, 'x', $1->r, 'x'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCFPUmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCFPUmode, DFmode, + gen_rtx_REG(DFmode, $1->r), + gen_rtx_REG(DFmode, $2->r)))); + }; +#line 1398 "x86-64.misc.py" +urcc : COMPARE_CC(rf, rf) [1, 3] +#line 1415 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + memorable($2->r); + }, + debug { + dumpRR("ucomiss", $2->r, 'x', $1->r, 'x'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCFPUmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCFPUmode, SFmode, + gen_rtx_REG(SFmode, $1->r), + gen_rtx_REG(SFmode, $2->r)))); + }; +#line 1400 "x86-64.misc.py" +rcc : COMPARE_CC(r64, r64) [1, 3] +#line 1415 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + memorable($2->r); + }, + debug { + dumpRR("cmpq", $2->r, 'q', $1->r, 'q'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, DImode, + gen_rtx_REG(DImode, $1->r), + gen_rtx_REG(DImode, $2->r)))); + }; +#line 1401 "x86-64.misc.py" +rcc : COMPARE_CC(r32, r32) [1, 2] +#line 1415 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + memorable($2->r); + }, + debug { + dumpRR("cmpl", $2->r, 'd', $1->r, 'd'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, SImode, + gen_rtx_REG(SImode, $1->r), + gen_rtx_REG(SImode, $2->r)))); + }; +#line 1402 "x86-64.misc.py" +rcc : COMPARE_CC(r16, r16) [1, 2] +#line 1415 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + memorable($2->r); + }, + debug { + dumpRR("cmpw", $2->r, 'w', $1->r, 'w'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, HImode, + gen_rtx_REG(HImode, $1->r), + gen_rtx_REG(HImode, $2->r)))); + }; +#line 1403 "x86-64.misc.py" +rcc : COMPARE_CC(r8, r8) [1, 2] +#line 1415 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + memorable($2->r); + }, + debug { + dumpRR("cmpb", $2->r, 'b', $1->r, 'b'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, QImode, + gen_rtx_REG(QImode, $1->r), + gen_rtx_REG(QImode, $2->r)))); + }; +#line 1408 "x86-64.misc.py" +rcc : COMPARE_CC(AND_DI(r64, r64), CONST_0) [1, 3] +#line 1415 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + memorable($2->r); + }, + debug { + dumpRR("testq", $2->r, 'q', $1->r, 'q'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, DImode, + gen_rtx_REG(DImode, $1->r), + gen_rtx_REG(DImode, $2->r)))); + }; +#line 1409 "x86-64.misc.py" +rcc : COMPARE_CC(AND_SI(r32, r32), CONST_0) [1, 2] +#line 1415 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + memorable($2->r); + }, + debug { + dumpRR("testq", $2->r, 'd', $1->r, 'd'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, SImode, + gen_rtx_REG(SImode, $1->r), + gen_rtx_REG(SImode, $2->r)))); + }; +#line 1410 "x86-64.misc.py" +rcc : COMPARE_CC(AND_HI(r16, r16), CONST_0) [1, 2] +#line 1415 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + memorable($2->r); + }, + debug { + dumpRR("testq", $2->r, 'w', $1->r, 'w'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, HImode, + gen_rtx_REG(HImode, $1->r), + gen_rtx_REG(HImode, $2->r)))); + }; +#line 1411 "x86-64.misc.py" +rcc : COMPARE_CC(AND_QI(r8, r8), CONST_0) [1, 2] +#line 1415 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + memorable($2->r); + }, + debug { + dumpRR("testq", $2->r, 'b', $1->r, 'b'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, QImode, + gen_rtx_REG(QImode, $1->r), + gen_rtx_REG(QImode, $2->r)))); + }; +#line 1441 "x86-64.misc.py" +rcc : COMPARE_CC(r64, imm32) [1, 3] +#line 1459 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpIR("cmpq", $2, $1->r, 'q'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, DImode, + gen_rtx_REG(DImode, $1->r), + GEN_INT($2->val)))); + }; +#line 1442 "x86-64.misc.py" +rcc : COMPARE_CC(r64, imm8) [1, 3] +#line 1459 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpIR("cmpq", $2, $1->r, 'q'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, DImode, + gen_rtx_REG(DImode, $1->r), + GEN_INT($2->val)))); + }; +#line 1443 "x86-64.misc.py" +rcc : COMPARE_CC(r32, imm32) [1, 2] +#line 1459 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpIR("cmpl", $2, $1->r, 'd'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, SImode, + gen_rtx_REG(SImode, $1->r), + GEN_INT($2->val)))); + }; +#line 1444 "x86-64.misc.py" +rcc : COMPARE_CC(r32, imm8) [1, 2] +#line 1459 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpIR("cmpl", $2, $1->r, 'd'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, SImode, + gen_rtx_REG(SImode, $1->r), + GEN_INT($2->val)))); + }; +#line 1445 "x86-64.misc.py" +rcc : COMPARE_CC(r16, imm16) [1, 3] +#line 1459 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpIR("cmpw", $2, $1->r, 'w'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, HImode, + gen_rtx_REG(HImode, $1->r), + GEN_INT($2->val)))); + }; +#line 1446 "x86-64.misc.py" +rcc : COMPARE_CC(r16, imm8) [1, 3] +#line 1459 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpIR("cmpw", $2, $1->r, 'w'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, HImode, + gen_rtx_REG(HImode, $1->r), + GEN_INT($2->val)))); + }; +#line 1447 "x86-64.misc.py" +rcc : COMPARE_CC(r8, imm8) [1, 2] +#line 1459 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpIR("cmpb", $2, $1->r, 'b'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, QImode, + gen_rtx_REG(QImode, $1->r), + GEN_INT($2->val)))); + }; +#line 1452 "x86-64.misc.py" +rcc : COMPARE_CC(AND_DI(r64, imm32), CONST_0) [1, 3] +#line 1459 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpIR("testq", $2, $1->r, 'q'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, DImode, + gen_rtx_REG(DImode, $1->r), + GEN_INT($2->val)))); + }; +#line 1453 "x86-64.misc.py" +rcc : COMPARE_CC(AND_SI(r32, imm32), CONST_0) [1, 2] +#line 1459 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpIR("testl", $2, $1->r, 'd'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, SImode, + gen_rtx_REG(SImode, $1->r), + GEN_INT($2->val)))); + }; +#line 1454 "x86-64.misc.py" +rcc : COMPARE_CC(AND_HI(r16, imm16), CONST_0) [1, 3] +#line 1459 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpIR("testw", $2, $1->r, 'w'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, HImode, + gen_rtx_REG(HImode, $1->r), + GEN_INT($2->val)))); + }; +#line 1455 "x86-64.misc.py" +rcc : COMPARE_CC(AND_QI(r8, imm8), CONST_0) [1, 2] +#line 1459 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpIR("testb", $2, $1->r, 'b'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, QImode, + gen_rtx_REG(QImode, $1->r), + GEN_INT($2->val)))); + }; +#line 1488 "x86-64.misc.py" +rcc : COMPARE_CC(r64, CONST_0) [1, 3] +#line 1495 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpRR("testq", $1->r, 'q', $1->r, 'q'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCNOmode, REG_CC), + gen_rtx_COMPARE(CCNOmode, + gen_rtx_REG(DImode, $1->r), + GEN_INT(0)))); + }; +#line 1489 "x86-64.misc.py" +rcc : COMPARE_CC(r32, CONST_0) [1, 2] +#line 1495 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpRR("testl", $1->r, 'd', $1->r, 'd'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCNOmode, REG_CC), + gen_rtx_COMPARE(CCNOmode, + gen_rtx_REG(SImode, $1->r), + GEN_INT(0)))); + }; +#line 1490 "x86-64.misc.py" +rcc : COMPARE_CC(r16, CONST_0) [1, 3] +#line 1495 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpRR("testw", $1->r, 'w', $1->r, 'w'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCNOmode, REG_CC), + gen_rtx_COMPARE(CCNOmode, + gen_rtx_REG(HImode, $1->r), + GEN_INT(0)))); + }; +#line 1491 "x86-64.misc.py" +rcc : COMPARE_CC(r8, CONST_0) [1, 2] +#line 1495 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + }, + debug { + dumpRR("testb", $1->r, 'b', $1->r, 'b'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCNOmode, REG_CC), + gen_rtx_COMPARE(CCNOmode, + gen_rtx_REG(QImode, $1->r), + GEN_INT(0)))); + }; +#line 1523 "x86-64.misc.py" +rcc : COMPARE_CC(MEM_DI(addr), imm32) [4, 3] +#line 1541 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + dumpIM("cmpq", $2, $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, DImode, + gen_rtx_MEM(DImode, $1->rtl), + GEN_INT($2->val)))); + }; +#line 1524 "x86-64.misc.py" +rcc : COMPARE_CC(MEM_DI(addr), imm8) [4, 3] +#line 1541 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + dumpIM("cmpq", $2, $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, DImode, + gen_rtx_MEM(DImode, $1->rtl), + GEN_INT($2->val)))); + }; +#line 1525 "x86-64.misc.py" +rcc : COMPARE_CC(MEM_SI(addr), imm32) [4, 2] +#line 1541 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + dumpIM("cmpl", $2, $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, SImode, + gen_rtx_MEM(SImode, $1->rtl), + GEN_INT($2->val)))); + }; +#line 1526 "x86-64.misc.py" +rcc : COMPARE_CC(MEM_SI(addr), imm8) [4, 2] +#line 1541 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + dumpIM("cmpl", $2, $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, SImode, + gen_rtx_MEM(SImode, $1->rtl), + GEN_INT($2->val)))); + }; +#line 1527 "x86-64.misc.py" +rcc : COMPARE_CC(MEM_HI(addr), imm16) [4, 3] +#line 1541 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + dumpIM("cmpw", $2, $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, HImode, + gen_rtx_MEM(HImode, $1->rtl), + GEN_INT($2->val)))); + }; +#line 1528 "x86-64.misc.py" +rcc : COMPARE_CC(MEM_HI(addr), imm8) [4, 3] +#line 1541 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + dumpIM("cmpw", $2, $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, HImode, + gen_rtx_MEM(HImode, $1->rtl), + GEN_INT($2->val)))); + }; +#line 1529 "x86-64.misc.py" +rcc : COMPARE_CC(MEM_QI(addr), imm8) [4, 2] +#line 1541 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + dumpIM("cmpb", $2, $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, QImode, + gen_rtx_MEM(QImode, $1->rtl), + GEN_INT($2->val)))); + }; +#line 1534 "x86-64.misc.py" +rcc : COMPARE_CC(AND_DI(MEM_DI(addr), imm32), CONST_0) [4, 3] +#line 1541 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + dumpIM("testq", $2, $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCZmode, DImode, + gen_rtx_MEM(DImode, $1->rtl), + GEN_INT($2->val)))); + }; +#line 1535 "x86-64.misc.py" +rcc : COMPARE_CC(AND_SI(MEM_SI(addr), imm32), CONST_0) [4, 2] +#line 1541 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + dumpIM("testl", $2, $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCZmode, SImode, + gen_rtx_MEM(SImode, $1->rtl), + GEN_INT($2->val)))); + }; +#line 1536 "x86-64.misc.py" +rcc : COMPARE_CC(AND_HI(MEM_HI(addr), imm16), CONST_0) [4, 3] +#line 1541 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + dumpIM("testw", $2, $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCZmode, HImode, + gen_rtx_MEM(HImode, $1->rtl), + GEN_INT($2->val)))); + }; +#line 1537 "x86-64.misc.py" +rcc : COMPARE_CC(AND_QI(MEM_QI(addr), imm8), CONST_0) [4, 2] +#line 1541 "x86-64.misc.py" + build { + add_addr(live, $1); + }, + remat { + flags = 0; + }, + debug { + dumpIM("testb", $2, $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCZmode, QImode, + gen_rtx_MEM(QImode, $1->rtl), + GEN_INT($2->val)))); + }; +#line 1562 "x86-64.misc.py" +urcc : COMPARE_CC(rd, MEM_DF(addr)) [4, 2] +#line 1572 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + add_addr(live, $2); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + }, + debug { + dumpMR("ucomisd", $2, $1->r, 'x'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCFPUmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCFPUmode, DFmode, + gen_rtx_REG(DFmode, $1->r), + gen_rtx_MEM(DFmode, $2->rtl)))); + }; +#line 1563 "x86-64.misc.py" +urcc : COMPARE_CC(rf, MEM_SF(addr)) [4, 2] +#line 1572 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + add_addr(live, $2); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + }, + debug { + dumpMR("ucomiss", $2, $1->r, 'x'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCFPUmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCFPUmode, SFmode, + gen_rtx_REG(SFmode, $1->r), + gen_rtx_MEM(SFmode, $2->rtl)))); + }; +#line 1565 "x86-64.misc.py" +rcc : COMPARE_CC(r64, MEM_DI(addr)) [4, 2] +#line 1572 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + add_addr(live, $2); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + }, + debug { + dumpMR("cmpq", $2, $1->r, 'q'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, DImode, + gen_rtx_REG(DImode, $1->r), + gen_rtx_MEM(DImode, $2->rtl)))); + }; +#line 1566 "x86-64.misc.py" +rcc : COMPARE_CC(r32, MEM_SI(addr)) [4, 1] +#line 1572 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + add_addr(live, $2); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + }, + debug { + dumpMR("cmpl", $2, $1->r, 'd'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, SImode, + gen_rtx_REG(SImode, $1->r), + gen_rtx_MEM(SImode, $2->rtl)))); + }; +#line 1567 "x86-64.misc.py" +rcc : COMPARE_CC(r16, MEM_HI(addr)) [4, 2] +#line 1572 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + add_addr(live, $2); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + }, + debug { + dumpMR("cmpw", $2, $1->r, 'w'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, HImode, + gen_rtx_REG(HImode, $1->r), + gen_rtx_MEM(HImode, $2->rtl)))); + }; +#line 1568 "x86-64.misc.py" +rcc : COMPARE_CC(r8, MEM_QI(addr)) [4, 1] +#line 1572 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + add_addr(live, $2); + }, + remat { + flags = 0; + }, + costs { + forgettable($1->r); + }, + debug { + dumpMR("cmpb", $2, $1->r, 'b'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, QImode, + gen_rtx_REG(QImode, $1->r), + gen_rtx_MEM(QImode, $2->rtl)))); + }; +#line 1597 "x86-64.misc.py" +rcc : COMPARE_CC(MEM_DI(addr), r64) [4, 2] +#line 1612 "x86-64.misc.py" + + build { + sparseset_set_bit(live, find($2->r)); + add_addr(live, $1); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->r); + }, + debug { + dumpRM("cmpq", $2->r, 'q', $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, DImode, + gen_rtx_MEM(DImode, $1->rtl), + gen_rtx_REG(DImode, $2->r)))); + }; +#line 1598 "x86-64.misc.py" +rcc : COMPARE_CC(MEM_SI(addr), r32) [4, 1] +#line 1612 "x86-64.misc.py" + + build { + sparseset_set_bit(live, find($2->r)); + add_addr(live, $1); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->r); + }, + debug { + dumpRM("cmpl", $2->r, 'd', $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, SImode, + gen_rtx_MEM(SImode, $1->rtl), + gen_rtx_REG(SImode, $2->r)))); + }; +#line 1599 "x86-64.misc.py" +rcc : COMPARE_CC(MEM_HI(addr), r16) [4, 2] +#line 1612 "x86-64.misc.py" + + build { + sparseset_set_bit(live, find($2->r)); + add_addr(live, $1); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->r); + }, + debug { + dumpRM("cmpw", $2->r, 'w', $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, HImode, + gen_rtx_MEM(HImode, $1->rtl), + gen_rtx_REG(HImode, $2->r)))); + }; +#line 1600 "x86-64.misc.py" +rcc : COMPARE_CC(MEM_QI(addr), r8) [4, 1] +#line 1612 "x86-64.misc.py" + + build { + sparseset_set_bit(live, find($2->r)); + add_addr(live, $1); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->r); + }, + debug { + dumpRM("cmpb", $2->r, 'b', $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCmode, REG_CC), + gen_rtx_COMPARE_assist(0, CCmode, QImode, + gen_rtx_MEM(QImode, $1->rtl), + gen_rtx_REG(QImode, $2->r)))); + }; +#line 1605 "x86-64.misc.py" +rcc : COMPARE_CC(AND_DI(MEM_DI(addr), r64), CONST_0) [4, 2] +#line 1612 "x86-64.misc.py" + + build { + sparseset_set_bit(live, find($2->r)); + add_addr(live, $1); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->r); + }, + debug { + dumpRM("testq", $2->r, 'q', $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, DImode, + gen_rtx_MEM(DImode, $1->rtl), + gen_rtx_REG(DImode, $2->r)))); + }; +#line 1606 "x86-64.misc.py" +rcc : COMPARE_CC(AND_SI(MEM_SI(addr), r32), CONST_0) [4, 1] +#line 1612 "x86-64.misc.py" + + build { + sparseset_set_bit(live, find($2->r)); + add_addr(live, $1); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->r); + }, + debug { + dumpRM("testl", $2->r, 'd', $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, SImode, + gen_rtx_MEM(SImode, $1->rtl), + gen_rtx_REG(SImode, $2->r)))); + }; +#line 1607 "x86-64.misc.py" +rcc : COMPARE_CC(AND_HI(MEM_HI(addr), r16), CONST_0) [4, 2] +#line 1612 "x86-64.misc.py" + + build { + sparseset_set_bit(live, find($2->r)); + add_addr(live, $1); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->r); + }, + debug { + dumpRM("testw", $2->r, 'w', $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, HImode, + gen_rtx_MEM(HImode, $1->rtl), + gen_rtx_REG(HImode, $2->r)))); + }; +#line 1608 "x86-64.misc.py" +rcc : COMPARE_CC(AND_QI(MEM_QI(addr), r8), CONST_0) [4, 1] +#line 1612 "x86-64.misc.py" + + build { + sparseset_set_bit(live, find($2->r)); + add_addr(live, $1); + }, + remat { + flags = 0; + }, + costs { + forgettable($2->r); + }, + debug { + dumpRM("testb", $2->r, 'b', $1); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCZmode, REG_CC), + gen_rtx_COMPARE_assist(1, CCZmode, QImode, + gen_rtx_MEM(QImode, $1->rtl), + gen_rtx_REG(QImode, $2->r)))); + }; +#line 1656 "x86-64.misc.py" +stmt : SET_ALL(r64, CALL_ALL(PAIR_ALL(MEM_QI(r64), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (0 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (0 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (0 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (0 == 0) { + dump_callR($2->r); + } else if (0 == 1) { + dump_callM($2->a); + } else if (0 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (0 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (0 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (0 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1657 "x86-64.misc.py" +stmt : SET_ALL(r64, CALL_ALL(PAIR_ALL(MEM_QI(MEM_DI(addr)), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (1 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (1 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (1 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (1 == 0) { + dump_callR($2->r); + } else if (1 == 1) { + dump_callM($2->a); + } else if (1 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (1 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (1 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (1 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1658 "x86-64.misc.py" +stmt : SET_ALL(r64, CALL_ALL(PAIR_ALL(MEM_QI(symbol), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (2 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (2 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (2 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (2 == 0) { + dump_callR($2->r); + } else if (2 == 1) { + dump_callM($2->a); + } else if (2 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (2 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (2 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (2 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1660 "x86-64.misc.py" +stmt : SET_ALL(r32, CALL_ALL(PAIR_ALL(MEM_QI(r64), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (0 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (0 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (0 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (0 == 0) { + dump_callR($2->r); + } else if (0 == 1) { + dump_callM($2->a); + } else if (0 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (0 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (0 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (0 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1661 "x86-64.misc.py" +stmt : SET_ALL(r32, CALL_ALL(PAIR_ALL(MEM_QI(MEM_DI(addr)), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (1 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (1 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (1 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (1 == 0) { + dump_callR($2->r); + } else if (1 == 1) { + dump_callM($2->a); + } else if (1 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (1 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (1 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (1 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1662 "x86-64.misc.py" +stmt : SET_ALL(r32, CALL_ALL(PAIR_ALL(MEM_QI(symbol), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (2 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (2 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (2 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (2 == 0) { + dump_callR($2->r); + } else if (2 == 1) { + dump_callM($2->a); + } else if (2 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (2 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (2 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (2 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1664 "x86-64.misc.py" +stmt : SET_ALL(r16, CALL_ALL(PAIR_ALL(MEM_QI(r64), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (0 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (0 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (0 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (0 == 0) { + dump_callR($2->r); + } else if (0 == 1) { + dump_callM($2->a); + } else if (0 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (0 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (0 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (0 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1665 "x86-64.misc.py" +stmt : SET_ALL(r16, CALL_ALL(PAIR_ALL(MEM_QI(MEM_DI(addr)), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (1 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (1 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (1 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (1 == 0) { + dump_callR($2->r); + } else if (1 == 1) { + dump_callM($2->a); + } else if (1 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (1 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (1 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (1 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1666 "x86-64.misc.py" +stmt : SET_ALL(r16, CALL_ALL(PAIR_ALL(MEM_QI(symbol), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (2 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (2 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (2 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (2 == 0) { + dump_callR($2->r); + } else if (2 == 1) { + dump_callM($2->a); + } else if (2 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (2 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (2 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (2 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1668 "x86-64.misc.py" +stmt : SET_ALL(r8, CALL_ALL(PAIR_ALL(MEM_QI(r64), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (0 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (0 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (0 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (0 == 0) { + dump_callR($2->r); + } else if (0 == 1) { + dump_callM($2->a); + } else if (0 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (0 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (0 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (0 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1669 "x86-64.misc.py" +stmt : SET_ALL(r8, CALL_ALL(PAIR_ALL(MEM_QI(MEM_DI(addr)), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (1 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (1 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (1 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (1 == 0) { + dump_callR($2->r); + } else if (1 == 1) { + dump_callM($2->a); + } else if (1 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (1 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (1 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (1 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1670 "x86-64.misc.py" +stmt : SET_ALL(r8, CALL_ALL(PAIR_ALL(MEM_QI(symbol), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (2 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (2 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (2 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (2 == 0) { + dump_callR($2->r); + } else if (2 == 1) { + dump_callM($2->a); + } else if (2 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (2 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (2 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (2 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DImode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1672 "x86-64.misc.py" +stmt : SET_ALL(rf, CALL_ALL(PAIR_ALL(MEM_QI(r64), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (0 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (0 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (0 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (0 == 0) { + dump_callR($2->r); + } else if (0 == 1) { + dump_callM($2->a); + } else if (0 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (0 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (0 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (0 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(SFmode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1673 "x86-64.misc.py" +stmt : SET_ALL(rf, CALL_ALL(PAIR_ALL(MEM_QI(MEM_DI(addr)), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (1 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (1 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (1 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (1 == 0) { + dump_callR($2->r); + } else if (1 == 1) { + dump_callM($2->a); + } else if (1 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (1 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (1 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (1 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(SFmode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1674 "x86-64.misc.py" +stmt : SET_ALL(rf, CALL_ALL(PAIR_ALL(MEM_QI(symbol), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (2 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (2 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (2 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (2 == 0) { + dump_callR($2->r); + } else if (2 == 1) { + dump_callM($2->a); + } else if (2 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (2 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (2 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (2 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DFmode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1676 "x86-64.misc.py" +stmt : SET_ALL(rd, CALL_ALL(PAIR_ALL(MEM_QI(r64), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (0 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (0 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (0 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (0 == 0) { + dump_callR($2->r); + } else if (0 == 1) { + dump_callM($2->a); + } else if (0 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (0 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (0 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (0 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DFmode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1677 "x86-64.misc.py" +stmt : SET_ALL(rd, CALL_ALL(PAIR_ALL(MEM_QI(MEM_DI(addr)), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (1 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (1 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (1 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (1 == 0) { + dump_callR($2->r); + } else if (1 == 1) { + dump_callM($2->a); + } else if (1 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (1 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (1 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (1 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DFmode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1678 "x86-64.misc.py" +stmt : SET_ALL(rd, CALL_ALL(PAIR_ALL(MEM_QI(symbol), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (2 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (2 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (2 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (2 == 0) { + dump_callR($2->r); + } else if (2 == 1) { + dump_callM($2->a); + } else if (2 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (2 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (2 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (2 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (1 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (1 == 1) { /* scalar return */ + # if (1 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(SFmode, $1->r); + # endif + } else if (1 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (1 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1687 "x86-64.misc.py" +stmt : SET_ALL(def_list, CALL_ALL(PAIR_ALL(MEM_QI(r64), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (0 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (0 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (0 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (0 == 0) { + dump_callR($2->r); + } else if (0 == 1) { + dump_callM($2->a); + } else if (0 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (0 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (0 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (0 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (2 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (2 == 1) { /* scalar return */ + # if (2 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DFmode, $1->r); + # endif + } else if (2 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (2 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1688 "x86-64.misc.py" +stmt : SET_ALL(def_list, CALL_ALL(PAIR_ALL(MEM_QI(MEM_DI(addr)), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (1 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (1 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (1 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (1 == 0) { + dump_callR($2->r); + } else if (1 == 1) { + dump_callM($2->a); + } else if (1 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (1 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (1 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (1 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (2 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (2 == 1) { /* scalar return */ + # if (2 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(DFmode, $1->r); + # endif + } else if (2 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (2 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1689 "x86-64.misc.py" +stmt : SET_ALL(def_list, CALL_ALL(PAIR_ALL(MEM_QI(symbol), imm64), use_list)) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (2 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($2->r)); + } else if (2 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $2); + } else if (2 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (2 == 0) { + dump_callR($2->r); + } else if (2 == 1) { + dump_callM($2->a); + } else if (2 == 2) { + dump_call($2->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (2 == 0) { + addr = gen_rtx_REG(DImode, $2->r); + } else if (2 == 1) { + addr = gen_rtx_MEM(DImode, $2->rtl); + } else if (2 == 2) { + addr = $2->rtl; + } else { + gcc_assert(0); + } + if (2 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (2 == 1) { /* scalar return */ + # if (2 == 1) /* $1 otherwise undefined */ + dst = gen_rtx_REG(SFmode, $1->r); + # endif + } else if (2 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($3->val)); + rtx dst_call = (2 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1695 "x86-64.misc.py" +stmt : CALL_ALL(PAIR_ALL(MEM_QI(r64), imm64), use_list) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (0 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($1->r)); + } else if (0 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $1); + } else if (0 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (0 == 0) { + dump_callR($1->r); + } else if (0 == 1) { + dump_callM($1->a); + } else if (0 == 2) { + dump_call($1->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (0 == 0) { + addr = gen_rtx_REG(DImode, $1->r); + } else if (0 == 1) { + addr = gen_rtx_MEM(DImode, $1->rtl); + } else if (0 == 2) { + addr = $1->rtl; + } else { + gcc_assert(0); + } + if (0 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (0 == 1) { /* scalar return */ + # if (0 == 1) /* $dst otherwise undefined */ + dst = gen_rtx_REG(DFmode, $dst->r); + # endif + } else if (0 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($2->val)); + rtx dst_call = (0 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1696 "x86-64.misc.py" +stmt : CALL_ALL(PAIR_ALL(MEM_QI(MEM_DI(addr)), imm64), use_list) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (1 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($1->r)); + } else if (1 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $1); + } else if (1 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (1 == 0) { + dump_callR($1->r); + } else if (1 == 1) { + dump_callM($1->a); + } else if (1 == 2) { + dump_call($1->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (1 == 0) { + addr = gen_rtx_REG(DImode, $1->r); + } else if (1 == 1) { + addr = gen_rtx_MEM(DImode, $1->rtl); + } else if (1 == 2) { + addr = $1->rtl; + } else { + gcc_assert(0); + } + if (0 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (0 == 1) { /* scalar return */ + # if (0 == 1) /* $dst otherwise undefined */ + dst = gen_rtx_REG(DFmode, $dst->r); + # endif + } else if (0 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($2->val)); + rtx dst_call = (0 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1697 "x86-64.misc.py" +stmt : CALL_ALL(PAIR_ALL(MEM_QI(symbol), imm64), use_list) [0, 0] +#line 1701 "x86-64.misc.py" + build { + handle_call_kills(add_edges, live); + if (2 == 0) { + /* indirect call to an address held in a register */ + sparseset_set_bit(live, find($1->r)); + } else if (2 == 1) { + /* indirect call to an address held in a symbol */ + add_addr(live, $1); + } else if (2 == 2) { + /* direct call to an immediate address (normal) */ + } else { + gcc_assert(0); + } + }, + remat { + flags = 0; + }, + debug { + if (2 == 0) { + dump_callR($1->r); + } else if (2 == 1) { + dump_callM($1->a); + } else if (2 == 2) { + dump_call($1->a.string); + } else { + gcc_assert(0); + } + }, + emit { + rtx call_fusage = CALL_INSN_FUNCTION_USAGE($$->insn); + rtx addr = 0; + rtx dst = 0; + if (2 == 0) { + addr = gen_rtx_REG(DImode, $1->r); + } else if (2 == 1) { + addr = gen_rtx_MEM(DImode, $1->rtl); + } else if (2 == 2) { + addr = $1->rtl; + } else { + gcc_assert(0); + } + if (0 == 0) { /* no value return */ + dst = 0; /* unused */ + } else if (0 == 1) { /* scalar return */ + # if (0 == 1) /* $dst otherwise undefined */ + dst = gen_rtx_REG(SFmode, $dst->r); + # endif + } else if (0 == 2) { /* structure return */ + dst = SET_DEST($$->rtl); + } else { + gcc_assert(0); + } + { + rtx pure_call = gen_rtx_CALL(VOIDmode, + gen_rtx_MEM(QImode, addr), /* call to a byte address */ + GEN_INT($2->val)); + rtx dst_call = (0 == 0) + ? pure_call /* void return value */ + : gen_rtx_SET(VOIDmode, dst, pure_call) /* scalar or structure */ + ; + rtx call_insn = emit_call_insn(dst_call); + add_function_usage_to(call_insn, call_fusage); + } + }; +#line 1774 "x86-64.misc.py" +use_list : LIST_ALL(use, use_list) [0, 0] +#line 1778 "x86-64.misc.py" + ; +#line 1775 "x86-64.misc.py" +def_list : LIST_ALL(def, def_list) [0, 0] +#line 1778 "x86-64.misc.py" + ; +#line 1783 "x86-64.misc.py" +use_list : END_OF_LIST [0, 0] +#line 1787 "x86-64.misc.py" + ; +#line 1784 "x86-64.misc.py" +def_list : END_OF_LIST [0, 0] +#line 1787 "x86-64.misc.py" + ; +#line 1792 "x86-64.misc.py" +stmt : use [0, 0] +#line 1796 "x86-64.misc.py" + ; +#line 1793 "x86-64.misc.py" +stmt : def [0, 0] +#line 1796 "x86-64.misc.py" + ; +#line 1801 "x86-64.misc.py" +use : USE_ALL(r64) [0, 0] +#line 1809 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + emit { + $$->rtl = gen_rtx_USE(VOIDmode, gen_rtx_REG(DImode, $1->r)); + }; +#line 1802 "x86-64.misc.py" +use : USE_ALL(r32) [0, 0] +#line 1809 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + emit { + $$->rtl = gen_rtx_USE(VOIDmode, gen_rtx_REG(DImode, $1->r)); + }; +#line 1803 "x86-64.misc.py" +use : USE_ALL(r16) [0, 0] +#line 1809 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + emit { + $$->rtl = gen_rtx_USE(VOIDmode, gen_rtx_REG(DImode, $1->r)); + }; +#line 1804 "x86-64.misc.py" +use : USE_ALL(r8) [0, 0] +#line 1809 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + emit { + $$->rtl = gen_rtx_USE(VOIDmode, gen_rtx_REG(DImode, $1->r)); + }; +#line 1805 "x86-64.misc.py" +use : USE_ALL(rd) [0, 0] +#line 1809 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + emit { + $$->rtl = gen_rtx_USE(VOIDmode, gen_rtx_REG(DImode, $1->r)); + }; +#line 1806 "x86-64.misc.py" +use : USE_ALL(rf) [0, 0] +#line 1809 "x86-64.misc.py" + build { + sparseset_set_bit(live, find($1->r)); + }, + remat { + flags = 0; + }, + emit { + $$->rtl = gen_rtx_USE(VOIDmode, gen_rtx_REG(DImode, $1->r)); + }; +#line 1827 "x86-64.misc.py" +def : DEF_ALL(r64) [0, 0] +#line 1835 "x86-64.misc.py" + ; +#line 1828 "x86-64.misc.py" +def : DEF_ALL(r32) [0, 0] +#line 1835 "x86-64.misc.py" + ; +#line 1829 "x86-64.misc.py" +def : DEF_ALL(r16) [0, 0] +#line 1835 "x86-64.misc.py" + ; +#line 1830 "x86-64.misc.py" +def : DEF_ALL(r8) [0, 0] +#line 1835 "x86-64.misc.py" + ; +#line 1831 "x86-64.misc.py" +def : DEF_ALL(rd) [0, 0] +#line 1835 "x86-64.misc.py" + ; +#line 1832 "x86-64.misc.py" +def : DEF_ALL(rf) [0, 0] +#line 1835 "x86-64.misc.py" + ; +#line 1851 "x86-64.misc.py" +condition : EQ_ALL(rd, rd) [1, 3] +#line 1857 "x86-64.misc.py" + names { + $$->code = UNEQ; + $$->cc_code = CCFPUmode; + }, + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + memorable($2->r); + }, + debug { + dumpRR("ucomisd", $2->r, 'x', $1->r, 'x'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCFPUmode, REG_CC), + gen_rtx_COMPARE_assist(/*is_test_variant*/0, CCFPUmode, DFmode, + gen_rtx_REG(DFmode, $1->r), + gen_rtx_REG(DFmode, $2->r)))); + }; +#line 1852 "x86-64.misc.py" +condition : NE_ALL(rd, rd) [1, 3] +#line 1857 "x86-64.misc.py" + names { + $$->code = LTGT; + $$->cc_code = CCFPUmode; + }, + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + memorable($2->r); + }, + debug { + dumpRR("ucomisd", $2->r, 'x', $1->r, 'x'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCFPUmode, REG_CC), + gen_rtx_COMPARE_assist(/*is_test_variant*/0, CCFPUmode, DFmode, + gen_rtx_REG(DFmode, $1->r), + gen_rtx_REG(DFmode, $2->r)))); + }; +#line 1853 "x86-64.misc.py" +condition : EQ_ALL(rf, rf) [1, 3] +#line 1857 "x86-64.misc.py" + names { + $$->code = UNEQ; + $$->cc_code = CCFPUmode; + }, + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + memorable($2->r); + }, + debug { + dumpRR("ucomiss", $2->r, 'x', $1->r, 'x'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCFPUmode, REG_CC), + gen_rtx_COMPARE_assist(/*is_test_variant*/0, CCFPUmode, SFmode, + gen_rtx_REG(SFmode, $1->r), + gen_rtx_REG(SFmode, $2->r)))); + }; +#line 1854 "x86-64.misc.py" +condition : NE_ALL(rf, rf) [1, 3] +#line 1857 "x86-64.misc.py" + names { + $$->code = LTGT; + $$->cc_code = CCFPUmode; + }, + build { + sparseset_set_bit(live, find($1->r)); + sparseset_set_bit(live, find($2->r)); + }, + remat { + flags = 0; + }, + costs { + memorable($1->r); + memorable($2->r); + }, + debug { + dumpRR("ucomiss", $2->r, 'x', $1->r, 'x'); + }, + emit { + emit_insn(gen_rtx_SET(VOIDmode, + gen_rtx_REG(CCFPUmode, REG_CC), + gen_rtx_COMPARE_assist(/*is_test_variant*/0, CCFPUmode, SFmode, + gen_rtx_REG(SFmode, $1->r), + gen_rtx_REG(SFmode, $2->r)))); + }; |