@@ -222,7 +222,7 @@ static void load_large_constant(int rr, int fc, uint32_t pi)
222222 EI (0x13 , 1 , rr , rr , 12 ); // slli RR, RR, 12
223223 EI (0x13 , 0 , rr , rr , (fc + (1 << 19 )) >> 20 ); // addi RR, RR, up(lo(fc))
224224 EI (0x13 , 1 , rr , rr , 12 ); // slli RR, RR, 12
225- fc = fc << 12 >> 12 ;
225+ fc = ( fc + ( 1 << 7 )) << 12 >> 12 ;
226226 EI (0x13 , 0 , rr , rr , fc >> 8 ); // addi RR, RR, lo1(lo(fc))
227227 EI (0x13 , 1 , rr , rr , 8 ); // slli RR, RR, 8
228228}
@@ -233,7 +233,7 @@ ST_FUNC void load(int r, SValue *sv)
233233 int v = fr & VT_VALMASK ;
234234 int rr = is_ireg (r ) ? ireg (r ) : freg (r );
235235 int fc = sv -> c .i ;
236- int save_fc = fc ;
236+ uint64_t save_fc = sv -> c . i ;
237237 int bt = sv -> type .t & VT_BTYPE ;
238238 int align , size ;
239239 if (fr & VT_LVAL ) {
@@ -264,7 +264,7 @@ ST_FUNC void load(int r, SValue *sv)
264264 si >>= 32 ;
265265 if (si != 0 ) {
266266 load_large_constant (rr , fc , si );
267- fc &= 0xff ;
267+ fc = fc << 24 >> 24 ;
268268 } else {
269269 o (0x37 | (rr << 7 ) | ((0x800 + fc ) & 0xfffff000 )); //lui RR, upper(fc)
270270 fc = fc << 20 >> 20 ;
@@ -289,7 +289,7 @@ ST_FUNC void load(int r, SValue *sv)
289289 si >>= 32 ;
290290 if (si != 0 ) {
291291 load_large_constant (rr , fc , si );
292- fc &= 0xff ;
292+ fc = fc << 24 >> 24 ;
293293 rb = rr ;
294294 do32bit = 0 ;
295295 } else if (bt == VT_LLONG ) {
@@ -379,7 +379,7 @@ ST_FUNC void store(int r, SValue *sv)
379379 int fr = sv -> r & VT_VALMASK ;
380380 int rr = is_ireg (r ) ? ireg (r ) : freg (r ), ptrreg ;
381381 int fc = sv -> c .i ;
382- int save_fc = fc ;
382+ uint64_t save_fc = sv -> c . i ;
383383 int bt = sv -> type .t & VT_BTYPE ;
384384 int align , size = type_size (& sv -> type , & align );
385385 assert (!is_float (bt ) || is_freg (r ) || bt == VT_LDOUBLE );
@@ -406,7 +406,7 @@ ST_FUNC void store(int r, SValue *sv)
406406 si >>= 32 ;
407407 if (si != 0 ) {
408408 load_large_constant (ptrreg , fc , si );
409- fc &= 0xff ;
409+ fc = fc << 24 >> 24 ;
410410 } else {
411411 o (0x37 | (ptrreg << 7 ) | ((0x800 + fc ) & 0xfffff000 )); //lui RR, upper(fc)
412412 fc = fc << 20 >> 20 ;
0 commit comments