- else if (-imm < 16777216) {
- assem_debug("sub %s,%s,#%#lx\n",regname[rt],regname[rt],-imm&0xfff000);
- output_w32(0x51400000 | is64 | imm12_rn_rd(-imm >> 12, rs, rt));
- if ((imm & 0xfff) || s) {
- assem_debug("sub%s %s,%s,#%#lx\n",st,regname[rt],regname[rs],-imm&0xfff);
- output_w32(0x51000000 | is64 | s | imm12_rn_rd(-imm & 0xfff, rt, rt));
+ else if (-imm < 16777216 && (!(-imm & 0xfff) || !s)) {
+ assem_debug("sub%s %s,%s,#%#lx\n", st, regname[rt], regname[rs], -imm&0xfff000);
+ output_w32(0x51400000 | is64 | s | imm12_rn_rd(-imm >> 12, rs, rt));
+ if (-imm & 0xfff) {
+ assem_debug("sub %s,%s,#%#lx\n", regname[rt], regname[rt], -imm&0xfff);
+ output_w32(0x51000000 | is64 | imm12_rn_rd(-imm & 0xfff, rt, rt));