Unified · Split
| @@ -222,7 +222,7 @@ static void load_large_constant(int rr, int fc, uint32_t pi) · 221 unmodified lines | |||
| 222 | EI(0x13, 1, rr, rr, 12); // slli RR, RR, 12 | 222 | EI(0x13, 1, rr, rr, 12); // slli RR, RR, 12 |
| 223 | EI(0x13, 0, rr, rr, (fc + (1 << 19)) >> 20); // addi RR, RR, up(lo(fc)) | 223 | EI(0x13, 0, rr, rr, (fc + (1 << 19)) >> 20); // addi RR, RR, up(lo(fc)) |
| 224 | EI(0x13, 1, rr, rr, 12); // slli RR, RR, 12 | 224 | EI(0x13, 1, rr, rr, 12); // slli RR, RR, 12 |
| 225 | fc = fc << 12 >> 12; | 225 | fc = (fc + (1 << 7)) << 12 >> 12; |
| 226 | EI(0x13, 0, rr, rr, fc >> 8); // addi RR, RR, lo1(lo(fc)) | 226 | EI(0x13, 0, rr, rr, fc >> 8); // addi RR, RR, lo1(lo(fc)) |
| 227 | EI(0x13, 1, rr, rr, 8); // slli RR, RR, 8 | 227 | EI(0x13, 1, rr, rr, 8); // slli RR, RR, 8 |
| 228 | } | 228 | } |
| @@ -233,7 +233,7 @@ ST_FUNC void load(int r, SValue *sv) · 4 unmodified lines | |||
| 233 | int v = fr & VT_VALMASK; | 233 | int v = fr & VT_VALMASK; |
| 234 | int rr = is_ireg(r) ? ireg(r) : freg(r); | 234 | int rr = is_ireg(r) ? ireg(r) : freg(r); |
| 235 | int fc = sv->c.i; | 235 | int fc = sv->c.i; |
| 236 | int save_fc = fc; | 236 | uint64_t save_fc = sv->c.i; |
| 237 | int bt = sv->type.t & VT_BTYPE; | 237 | int bt = sv->type.t & VT_BTYPE; |
| 238 | int align, size; | 238 | int align, size; |
| 239 | if (fr & VT_LVAL) { | 239 | if (fr & VT_LVAL) { |
| @@ -264,7 +264,7 @@ ST_FUNC void load(int r, SValue *sv) · 24 unmodified lines | |||
| 264 | si >>= 32; | 264 | si >>= 32; |
| 265 | if (si != 0) { | 265 | if (si != 0) { |
| 266 | load_large_constant(rr, fc, si); | 266 | load_large_constant(rr, fc, si); |
| 267 | fc &= 0xff; | 267 | fc = fc << 24 >> 24; |
| 268 | } else { | 268 | } else { |
| 269 | o(0x37 | (rr << 7) | ((0x800 + fc) & 0xfffff000)); //lui RR, upper(fc) | 269 | o(0x37 | (rr << 7) | ((0x800 + fc) & 0xfffff000)); //lui RR, upper(fc) |
| 270 | fc = fc << 20 >> 20; | 270 | fc = fc << 20 >> 20; |
| @@ -289,7 +289,7 @@ ST_FUNC void load(int r, SValue *sv) · 18 unmodified lines | |||
| 289 | si >>= 32; | 289 | si >>= 32; |
| 290 | if (si != 0) { | 290 | if (si != 0) { |
| 291 | load_large_constant(rr, fc, si); | 291 | load_large_constant(rr, fc, si); |
| 292 | fc &= 0xff; | 292 | fc = fc << 24 >> 24; |
| 293 | rb = rr; | 293 | rb = rr; |
| 294 | do32bit = 0; | 294 | do32bit = 0; |
| 295 | } else if (bt == VT_LLONG) { | 295 | } else if (bt == VT_LLONG) { |
| @@ -379,7 +379,7 @@ ST_FUNC void store(int r, SValue *sv) · 83 unmodified lines | |||
| 379 | int fr = sv->r & VT_VALMASK; | 379 | int fr = sv->r & VT_VALMASK; |
| 380 | int rr = is_ireg(r) ? ireg(r) : freg(r), ptrreg; | 380 | int rr = is_ireg(r) ? ireg(r) : freg(r), ptrreg; |
| 381 | int fc = sv->c.i; | 381 | int fc = sv->c.i; |
| 382 | int save_fc = fc; | 382 | uint64_t save_fc = sv->c.i; |
| 383 | int bt = sv->type.t & VT_BTYPE; | 383 | int bt = sv->type.t & VT_BTYPE; |
| 384 | int align, size = type_size(&sv->type, &align); | 384 | int align, size = type_size(&sv->type, &align); |
| 385 | assert(!is_float(bt) || is_freg(r) || bt == VT_LDOUBLE); | 385 | assert(!is_float(bt) || is_freg(r) || bt == VT_LDOUBLE); |
| @@ -406,7 +406,7 @@ ST_FUNC void store(int r, SValue *sv) · 20 unmodified lines | |||
| 406 | si >>= 32; | 406 | si >>= 32; |
| 407 | if (si != 0) { | 407 | if (si != 0) { |
| 408 | load_large_constant(ptrreg, fc, si); | 408 | load_large_constant(ptrreg, fc, si); |
| 409 | fc &= 0xff; | 409 | fc = fc << 24 >> 24; |
| 410 | } else { | 410 | } else { |
| 411 | o(0x37 | (ptrreg << 7) | ((0x800 + fc) & 0xfffff000)); //lui RR, upper(fc) | 411 | o(0x37 | (ptrreg << 7) | ((0x800 + fc) & 0xfffff000)); //lui RR, upper(fc) |
| 412 | fc = fc << 20 >> 20; | 412 | fc = fc << 20 >> 20; |