diff options
author | Doug Nazar <nazard@nazar.ca> | 2019-08-20 04:50:56 -0400 |
---|---|---|
committer | Doug Nazar <nazard@nazar.ca> | 2019-08-20 04:50:56 -0400 |
commit | d7e258c12f3f2d997d013b34708a2483e67b9cc3 (patch) | |
tree | b35880fd096ac36d6aabeb6ce5334292a664ac29 /orc/orcprogram-altivec.c | |
parent | 4736cda4877a2191462f94d33484a32d3ff1b331 (diff) | |
download | orc-d7e258c12f3f2d997d013b34708a2483e67b9cc3.tar.gz |
powerpc: Add little endian support
Diffstat (limited to 'orc/orcprogram-altivec.c')
-rw-r--r-- | orc/orcprogram-altivec.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/orc/orcprogram-altivec.c b/orc/orcprogram-altivec.c index c309634..5f945f6 100644 --- a/orc/orcprogram-altivec.c +++ b/orc/orcprogram-altivec.c @@ -99,6 +99,9 @@ orc_compiler_powerpc_get_default_flags (void) #ifdef __powerpc64__ flags |= ORC_TARGET_POWERPC_64BIT; #endif +#if defined(__LITTLE_ENDIAN__) + flags |= ORC_TARGET_POWERPC_LE; +#endif return flags; } @@ -401,14 +404,26 @@ orc_compiler_powerpc_assemble (OrcCompiler *compiler) if (var->size == 2) { powerpc_emit_vxor (compiler, POWERPC_V0, POWERPC_V0, POWERPC_V0); - powerpc_emit_vmrghh (compiler, var->alloc, POWERPC_V0, var->alloc); + if (IS_POWERPC_BE (compiler)) { + powerpc_emit_vmrghh (compiler, var->alloc, POWERPC_V0, var->alloc); + } else { + powerpc_emit_vmrglh (compiler, var->alloc, POWERPC_V0, var->alloc); + } } - ORC_ASM_CODE(compiler," lvsr %s, 0, %s\n", - powerpc_get_regname (POWERPC_V0), - powerpc_get_regname (POWERPC_R0)); - powerpc_emit_X (compiler, 0x7c00004c, powerpc_regnum(POWERPC_V0), - 0, powerpc_regnum(POWERPC_R0)); + if (IS_POWERPC_BE (compiler)) { + ORC_ASM_CODE(compiler," lvsr %s, 0, %s\n", + powerpc_get_regname (POWERPC_V0), + powerpc_get_regname (POWERPC_R0)); + powerpc_emit_X (compiler, 0x7c00004c, powerpc_regnum(POWERPC_V0), + 0, powerpc_regnum(POWERPC_R0)); + } else { + ORC_ASM_CODE(compiler," lvsl %s, 0, %s\n", + powerpc_get_regname (POWERPC_V0), + powerpc_get_regname (POWERPC_R0)); + powerpc_emit_X (compiler, 0x7c00000c, powerpc_regnum(POWERPC_V0), + 0, powerpc_regnum(POWERPC_R0)); + } powerpc_emit_vperm (compiler, var->alloc, var->alloc, var->alloc, POWERPC_V0); |