summaryrefslogtreecommitdiff
path: root/dynasm/dasm_ppc.h
diff options
context:
space:
mode:
authorJosh Haberman <jhaberman@gmail.com>2012-03-24 12:28:43 -0700
committerJosh Haberman <jhaberman@gmail.com>2012-03-24 12:28:43 -0700
commitc16c9781939eb8cf175ae82b647c86ed7ea1d767 (patch)
treece7e61052636b388d629590af0dde8d5dd018215 /dynasm/dasm_ppc.h
parent86bad61b76a260ffc442acffbe58feee67df45e5 (diff)
Updated DynASM from upstream (Lua 5.2 support).
Diffstat (limited to 'dynasm/dasm_ppc.h')
-rw-r--r--dynasm/dasm_ppc.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/dynasm/dasm_ppc.h b/dynasm/dasm_ppc.h
index e928ffe..bf5957e 100644
--- a/dynasm/dasm_ppc.h
+++ b/dynasm/dasm_ppc.h
@@ -1,7 +1,7 @@
/*
** DynASM PPC encoding engine.
-** Copyright (C) 2005-2011 Mike Pall. All rights reserved.
-** Released under the MIT/X license. See dynasm.lua for full copyright notice.
+** Copyright (C) 2005-2012 Mike Pall. All rights reserved.
+** Released under the MIT license. See dynasm.lua for full copyright notice.
*/
#include <stddef.h>
@@ -233,6 +233,9 @@ void dasm_put(Dst_DECL, int start, ...)
case DASM_IMM:
#ifdef DASM_CHECKS
CK((n & ((1<<((ins>>10)&31))-1)) == 0, RANGE_I);
+#endif
+ n >>= ((ins>>10)&31);
+#ifdef DASM_CHECKS
if (ins & 0x8000)
CK(((n + (1<<(((ins>>5)&31)-1)))>>((ins>>5)&31)) == 0, RANGE_I);
else
@@ -339,7 +342,7 @@ int dasm_encode(Dst_DECL, void *buffer)
case DASM_STOP: case DASM_SECTION: goto stop;
case DASM_ESC: *cp++ = *p++; break;
case DASM_REL_EXT:
- n = DASM_EXTERN(Dst, (unsigned char *)cp, (ins & 2047), 1);
+ n = DASM_EXTERN(Dst, (unsigned char *)cp, (ins & 2047), 1) - 4;
goto patchrel;
case DASM_ALIGN:
ins &= 255; while ((((char *)cp - base) & ins)) *cp++ = 0x60000000;
@@ -360,7 +363,7 @@ int dasm_encode(Dst_DECL, void *buffer)
break;
case DASM_LABEL_PC: break;
case DASM_IMM:
- cp[-1] |= ((n>>((ins>>10)&31)) & ((1<<((ins>>5)&31))-1)) << (ins&31);
+ cp[-1] |= (n & ((1<<((ins>>5)&31))-1)) << (ins&31);
break;
default: *cp++ = ins; break;
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback