Revision 379f6698 tcg/arm/tcg-target.c
b/tcg/arm/tcg-target.c | ||
---|---|---|
990 | 990 |
# endif |
991 | 991 |
|
992 | 992 |
*label_ptr += ((void *) s->code_ptr - (void *) label_ptr - 8) >> 2; |
993 |
#else |
|
993 |
#else /* !CONFIG_SOFTMMU */ |
|
994 |
if (GUEST_BASE) { |
|
995 |
uint32_t offset = GUEST_BASE; |
|
996 |
int i; |
|
997 |
int rot; |
|
998 |
|
|
999 |
while (offset) { |
|
1000 |
i = ctz32(offset) & ~1; |
|
1001 |
rot = ((32 - i) << 7) & 0xf00; |
|
1002 |
|
|
1003 |
tcg_out_dat_imm(s, COND_AL, ARITH_ADD, 8, addr_reg, |
|
1004 |
((offset >> i) & 0xff) | rot); |
|
1005 |
addr_reg = 8; |
|
1006 |
offset &= ~(0xff << i); |
|
1007 |
} |
|
1008 |
} |
|
994 | 1009 |
switch (opc) { |
995 | 1010 |
case 0: |
996 | 1011 |
tcg_out_ld8_12(s, COND_AL, data_reg, addr_reg, 0); |
... | ... | |
1200 | 1215 |
# endif |
1201 | 1216 |
|
1202 | 1217 |
*label_ptr += ((void *) s->code_ptr - (void *) label_ptr - 8) >> 2; |
1203 |
#else |
|
1218 |
#else /* !CONFIG_SOFTMMU */ |
|
1219 |
if (GUEST_BASE) { |
|
1220 |
uint32_t offset = GUEST_BASE; |
|
1221 |
int i; |
|
1222 |
int rot; |
|
1223 |
|
|
1224 |
while (offset) { |
|
1225 |
i = ctz32(offset) & ~1; |
|
1226 |
rot = ((32 - i) << 7) & 0xf00; |
|
1227 |
|
|
1228 |
tcg_out_dat_imm(s, COND_AL, ARITH_ADD, 8, addr_reg, |
|
1229 |
((offset >> i) & 0xff) | rot); |
|
1230 |
addr_reg = 8; |
|
1231 |
offset &= ~(0xff << i); |
|
1232 |
} |
|
1233 |
} |
|
1204 | 1234 |
switch (opc) { |
1205 | 1235 |
case 0: |
1206 | 1236 |
tcg_out_st8_12(s, COND_AL, data_reg, addr_reg, 0); |
Also available in: Unified diff