Commit 26cc915cff2adeabff44ca8b779de3a54fec0171
1 parent
77fcd093
Use sethi and arith functions, fix comment
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4560 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
26 additions
and
23 deletions
tcg/sparc/tcg-target.c
| ... | ... | @@ -243,10 +243,28 @@ static inline int tcg_target_const_match(tcg_target_long val, |
| 243 | 243 | #define STW (INSN_OP(3) | INSN_OP3(0x04)) |
| 244 | 244 | #define STX (INSN_OP(3) | INSN_OP3(0x0e)) |
| 245 | 245 | |
| 246 | +static inline void tcg_out_arith(TCGContext *s, int rd, int rs1, int rs2, | |
| 247 | + int op) | |
| 248 | +{ | |
| 249 | + tcg_out32(s, op | INSN_RD(rd) | INSN_RS1(rs1) | | |
| 250 | + INSN_RS2(rs2)); | |
| 251 | +} | |
| 252 | + | |
| 253 | +static inline void tcg_out_arithi(TCGContext *s, int rd, int rs1, int offset, | |
| 254 | + int op) | |
| 255 | +{ | |
| 256 | + tcg_out32(s, op | INSN_RD(rd) | INSN_RS1(rs1) | | |
| 257 | + INSN_IMM13(offset)); | |
| 258 | +} | |
| 259 | + | |
| 246 | 260 | static inline void tcg_out_mov(TCGContext *s, int ret, int arg) |
| 247 | 261 | { |
| 248 | - tcg_out32(s, ARITH_OR | INSN_RD(ret) | INSN_RS1(arg) | | |
| 249 | - INSN_RS2(TCG_REG_G0)); | |
| 262 | + tcg_out_arith(s, ret, arg, TCG_REG_G0, ARITH_OR); | |
| 263 | +} | |
| 264 | + | |
| 265 | +static inline void tcg_out_sethi(TCGContext *s, int ret, uint32_t arg) | |
| 266 | +{ | |
| 267 | + tcg_out32(s, SETHI | INSN_RD(ret) | ((arg & 0xfffffc00) >> 10)); | |
| 250 | 268 | } |
| 251 | 269 | |
| 252 | 270 | static inline void tcg_out_movi(TCGContext *s, TCGType type, |
| ... | ... | @@ -260,7 +278,7 @@ static inline void tcg_out_movi(TCGContext *s, TCGType type, |
| 260 | 278 | tcg_out32(s, ARITH_OR | INSN_RD(ret) | INSN_RS1(TCG_REG_G0) | |
| 261 | 279 | INSN_IMM13(arg)); |
| 262 | 280 | else { |
| 263 | - tcg_out32(s, SETHI | INSN_RD(ret) | ((arg & 0xfffffc00) >> 10)); | |
| 281 | + tcg_out_sethi(s, ret, arg); | |
| 264 | 282 | if (arg & 0x3ff) |
| 265 | 283 | tcg_out32(s, ARITH_OR | INSN_RD(ret) | INSN_RS1(ret) | |
| 266 | 284 | INSN_IMM13(arg & 0x3ff)); |
| ... | ... | @@ -270,7 +288,7 @@ static inline void tcg_out_movi(TCGContext *s, TCGType type, |
| 270 | 288 | static inline void tcg_out_ld_raw(TCGContext *s, int ret, |
| 271 | 289 | tcg_target_long arg) |
| 272 | 290 | { |
| 273 | - tcg_out32(s, SETHI | INSN_RD(ret) | (((uint32_t)arg & 0xfffffc00) >> 10)); | |
| 291 | + tcg_out_sethi(s, ret, arg); | |
| 274 | 292 | tcg_out32(s, LDUW | INSN_RD(ret) | INSN_RS1(ret) | |
| 275 | 293 | INSN_IMM13(arg & 0x3ff)); |
| 276 | 294 | } |
| ... | ... | @@ -282,7 +300,7 @@ static inline void tcg_out_ld_ptr(TCGContext *s, int ret, |
| 282 | 300 | if (!check_fit_tl(arg, 32) && (arg & ~0xffffffff) != 0) |
| 283 | 301 | fprintf(stderr, "unimplemented %s with offset %ld\n", __func__, arg); |
| 284 | 302 | if (!check_fit_i32(arg, 13)) |
| 285 | - tcg_out32(s, SETHI | INSN_RD(ret) | (((uint32_t)arg & 0xfffffc00) >> 10)); | |
| 303 | + tcg_out_sethi(s, ret, arg); | |
| 286 | 304 | tcg_out32(s, LDX | INSN_RD(ret) | INSN_RS1(ret) | |
| 287 | 305 | INSN_IMM13(arg & 0x3ff)); |
| 288 | 306 | #else |
| ... | ... | @@ -320,20 +338,6 @@ static inline void tcg_out_st(TCGContext *s, TCGType type, int arg, |
| 320 | 338 | tcg_out_ldst(s, arg, arg1, arg2, STX); |
| 321 | 339 | } |
| 322 | 340 | |
| 323 | -static inline void tcg_out_arith(TCGContext *s, int rd, int rs1, int rs2, | |
| 324 | - int op) | |
| 325 | -{ | |
| 326 | - tcg_out32(s, op | INSN_RD(rd) | INSN_RS1(rs1) | | |
| 327 | - INSN_RS2(rs2)); | |
| 328 | -} | |
| 329 | - | |
| 330 | -static inline void tcg_out_arithi(TCGContext *s, int rd, int rs1, int offset, | |
| 331 | - int op) | |
| 332 | -{ | |
| 333 | - tcg_out32(s, op | INSN_RD(rd) | INSN_RS1(rs1) | | |
| 334 | - INSN_IMM13(offset)); | |
| 335 | -} | |
| 336 | - | |
| 337 | 341 | static inline void tcg_out_sety(TCGContext *s, tcg_target_long val) |
| 338 | 342 | { |
| 339 | 343 | if (val == 0 || val == -1) |
| ... | ... | @@ -356,7 +360,7 @@ static inline void tcg_out_addi(TCGContext *s, int reg, tcg_target_long val) |
| 356 | 360 | |
| 357 | 361 | static inline void tcg_out_nop(TCGContext *s) |
| 358 | 362 | { |
| 359 | - tcg_out32(s, SETHI | INSN_RD(TCG_REG_G0) | 0); | |
| 363 | + tcg_out_sethi(s, TCG_REG_G0, 0); | |
| 360 | 364 | } |
| 361 | 365 | |
| 362 | 366 | static void tcg_out_branch(TCGContext *s, int opc, int label_index) |
| ... | ... | @@ -392,7 +396,7 @@ static void tcg_out_brcond(TCGContext *s, int cond, |
| 392 | 396 | int label_index) |
| 393 | 397 | { |
| 394 | 398 | if (const_arg2 && arg2 == 0) |
| 395 | - /* orcc r, r, %g0 */ | |
| 399 | + /* orcc %g0, r, %g0 */ | |
| 396 | 400 | tcg_out_arith(s, TCG_REG_G0, TCG_REG_G0, arg1, ARITH_ORCC); |
| 397 | 401 | else |
| 398 | 402 | /* subcc r1, r2, %g0 */ |
| ... | ... | @@ -780,8 +784,7 @@ static inline void tcg_out_op(TCGContext *s, int opc, const TCGArg *args, |
| 780 | 784 | case INDEX_op_goto_tb: |
| 781 | 785 | if (s->tb_jmp_offset) { |
| 782 | 786 | /* direct jump method */ |
| 783 | - tcg_out32(s, SETHI | INSN_RD(TCG_REG_I5) | | |
| 784 | - ((args[0] & 0xffffe000) >> 10)); | |
| 787 | + tcg_out_sethi(s, TCG_REG_I5, args[0] & 0xffffe000); | |
| 785 | 788 | tcg_out32(s, JMPL | INSN_RD(TCG_REG_G0) | INSN_RS1(TCG_REG_I5) | |
| 786 | 789 | INSN_IMM13((args[0] & 0x1fff))); |
| 787 | 790 | s->tb_jmp_offset[args[0]] = s->code_ptr - s->code_buf; | ... | ... |