[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [Qemu-devel] [V6 PATCH 15/18] target-ppc: Move To/From VS
From: |
Richard Henderson |
Subject: |
Re: [Qemu-ppc] [Qemu-devel] [V6 PATCH 15/18] target-ppc: Move To/From VSR Instructions |
Date: |
Wed, 15 Jan 2014 13:07:47 -0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 |
On 01/14/2014 06:14 AM, Tom Musta wrote:
> However, the word versions are a bit more tricky. The VSR operand is always
> an i64. However, the GPR operand is either an i32 (on 32-bit implementations)
> or a part of an i64. I could not find single TCG operations to handle
> these cases. Specifically, here is what I think doesn't work with your
> suggestions:
>
> (1) Using tcg_gen_ext32u_tl for mfvsrwz does not compile on 32-bit PPC -- the
> ext32u_tl operation is equivalent to mov_i32 but the source operand (VSRH) is
> an i64.
>
> (2) Using tcg_gen_ext_tl_i64 for mtvsrwa compiles but is incorrect on 64-bit
> PPC
> -- the ext_tl_i64 translates to mov_i64. The instruction semantic is to sign
> extend the lower 32 bits of the 64-bit source GPR.
>
> (3) Similarly, using tcg_gen_extu_tl_i64 for mtvsrwz is incorrect for 64-bit
> PPC -- this is a mov_i64 and hence does not zero out the upper 32 bits of the
> target VSRH.
Hmm, you're right that there's not one symbol that does the job for each case.
However, there's an opcode that does the job for each case. So perhaps we need
#ifdef TARGET_PPC64
#define ppc_gen_mfcsrwz tcg_gen_ext32u_i64
#define ppc_gen_mtvsrwa tcg_gen_ext32s_i64
#define ppc_gen_mtvsrwz tcg_gen_ext32u_i64
#else
#define ppc_gen_mfcsrwz tcg_gen_trunc_i64_i32
#define ppc_gen_mtvsrwa tcg_gen_ext_i32_i64
#define ppc_gen_mtvsrwz tcg_gen_extu_i32_i64
#endif
and then use those within your other macros.
r~
- [Qemu-ppc] [V6 PATCH 06/18] target-ppc: VSX Stage 4: Add xsaddsp and xssubsp, (continued)
- [Qemu-ppc] [V6 PATCH 06/18] target-ppc: VSX Stage 4: Add xsaddsp and xssubsp, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 07/18] target-ppc: VSX Stage 4: Add xsmulsp, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 08/18] target-ppc: VSX Stage 4: Add xsdivsp, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 09/18] target-ppc: VSX Stage 4: Add xsresp, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 13/18] target-ppc: VSX Stage 4: Add xscvsxdsp and xscvuxdsp, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 14/18] target-ppc: VSX Stage 4: Add xxleqv, xxlnand and xxlorc, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 12/18] target-ppc: VSX Stage 4: Add Scalar SP Fused Multiply-Adds, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 15/18] target-ppc: Move To/From VSR Instructions, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 16/18] target-ppc: Floating Merge Word Instructions, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 10/18] target-ppc: VSX Stage 4: Add xssqrtsp, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 11/18] target-ppc: VSX Stage 4: add xsrsqrtesp, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 17/18] target-ppc: Scalar Round to Single Precision, Tom Musta, 2014/01/10
- [Qemu-ppc] [V6 PATCH 18/18] target-ppc: Scalar Non-Signalling Conversions, Tom Musta, 2014/01/10