History

Correct riscv load_large_constant

herman ten brugge committed 1 year ago

Commit 2eca4df1 parent 7c23c481 file · +6 −6Browse files

Unified · Split

riscv64-gen.c+6−6
@@ -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, 12222 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, 12224 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, 8227 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;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t