All new accounts created on Gitlab now require administrator approval. If you invite any collaborators, please let Flux staff know so they can approve the accounts.

Commit 3ee1b855 authored by malc's avatar malc

Optimize 64 bit bswap

Use rldimi instead of rldicr/or pair, saves us one instruction.
Suggested by Hollis Blanchard.

git-svn-id: svn:// c046a42c-6fe2-441c-8c8c-71466251a162
parent bdadc0b5
......@@ -303,6 +303,7 @@ static int tcg_target_const_match (tcg_target_long val,
#define RLDICL XO30( 0)
#define RLDICR XO30( 1)
#define RLDIMI XO30( 3)
#define BCLR XO19( 16)
#define BCCTR XO19(528)
......@@ -691,11 +692,10 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc)
case 3:
if (bswap) {
tcg_out32 (s, LWBRX | RT (0) | RB (r0));
tcg_out32 (s, ADDI | RT (r1) | RA (r0) | 4);
tcg_out32 (s, LWBRX | RT (data_reg) | RB (r1));
tcg_out_rld (s, RLDICR, data_reg, data_reg, 32, 31);
tcg_out32 (s, OR | SAB (0, data_reg, data_reg));
tcg_out_movi32 (s, 0, 4);
tcg_out32 (s, LWBRX | RT (data_reg) | RB (r0));
tcg_out32 (s, LWBRX | RT ( r1) | RA (r0));
tcg_out_rld (s, RLDIMI, data_reg, r1, 32, 0);
else tcg_out32 (s, LD | RT (data_reg) | RA (r0));
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment