summaryrefslogtreecommitdiff
path: root/orc/orcprogram-altivec.c
diff options
context:
space:
mode:
authorDoug Nazar <nazard@nazar.ca>2019-08-20 04:50:56 -0400
committerDoug Nazar <nazard@nazar.ca>2019-08-20 04:50:56 -0400
commitd7e258c12f3f2d997d013b34708a2483e67b9cc3 (patch)
treeb35880fd096ac36d6aabeb6ce5334292a664ac29 /orc/orcprogram-altivec.c
parent4736cda4877a2191462f94d33484a32d3ff1b331 (diff)
downloadorc-d7e258c12f3f2d997d013b34708a2483e67b9cc3.tar.gz
powerpc: Add little endian support
Diffstat (limited to 'orc/orcprogram-altivec.c')
-rw-r--r--orc/orcprogram-altivec.c27
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);