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