summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZoltan Varga <vargaz@gmail.com>2014-04-01 18:39:05 +0000
committerZoltan Varga <vargaz@gmail.com>2014-04-01 18:39:05 +0000
commit12741090edd2230bfd0fac498af3e304680380b4 (patch)
treea01393c4b6d4b76e253c7b25e15ff12c1f6a7a71
parent21ca1bad7d0447bb5d420a58128e1c2733635efa (diff)
downloadffts-12741090edd2230bfd0fac498af3e304680380b4.zip
ffts-12741090edd2230bfd0fac498af3e304680380b4.tar.gz
[jit] Implement support for atomic intrinsics on arm.
-rw-r--r--arm/arm-codegen.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/arm/arm-codegen.h b/arm/arm-codegen.h
index 5a3dba0..d4d7f7c 100644
--- a/arm/arm-codegen.h
+++ b/arm/arm-codegen.h
@@ -1107,6 +1107,18 @@ typedef union {
#define ARM_UDIV_COND(p, rd, rn, rm, cond) ARM_EMIT (p, (((cond) << 28) | (0xe << 23) | (0x3 << 20) | ((rd) << 16) | (0xf << 12) | ((rm) << 8) | (0x0 << 5) | (0x1 << 4) | ((rn) << 0)))
#define ARM_UDIV(p, rd, rn, rm) ARM_UDIV_COND ((p), (rd), (rn), (rm), ARMCOND_AL)
+/* ARMv7 */
+
+typedef enum {
+ ARM_DMB_SY = 0xf,
+} ArmDmbFlags;
+
+#define ARM_DMB(p, option) ARM_EMIT ((p), ((0xf << 28) | (0x57 << 20) | (0xf << 16) | (0xf << 12) | (0x0 << 8) | (0x5 << 4) | ((option) << 0)))
+
+#define ARM_LDREX_REG(p, rt, rn) ARM_EMIT ((p), ((ARMCOND_AL << 28) | (0xc << 21) | (0x1 << 20) | ((rn) << 16) | ((rt) << 12)) | (0xf << 8) | (0x9 << 4) | 0xf << 0)
+
+#define ARM_STREX_REG(p, rd, rt, rn) ARM_EMIT ((p), ((ARMCOND_AL << 28) | (0xc << 21) | (0x0 << 20) | ((rn) << 16) | ((rd) << 12)) | (0xf << 8) | (0x9 << 4) | ((rt) << 0))
+
#ifdef __cplusplus
}
#endif
OpenPOWER on IntegriCloud