arm32: using ARMv6 memory fence

This commit is contained in:
Matthew Flatt 2020-08-20 07:34:56 -06:00
parent 7a373de4cb
commit 85f3e9f5cb
3 changed files with 16 additions and 6 deletions

View File

@ -470,7 +470,11 @@ typedef char tputsputcchar;
#define USE_DEV_URANDOM_UUID
#if defined(__arm64__) || defined(__arm32__)
# if arm_isa_version == 6
# define STORE_FENCE() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r" (0) : "memory")
# else
# define STORE_FENCE() __asm__ __volatile__ ("dmb ishst" : : : "memory")
# endif
#elif defined(__powerpc64__)
# define STORE_FENCE() __asm__ __volatile__ ("lwsync" : : : "memory")
#elif defined(__powerpc__) || defined(__POWERPC__)

View File

@ -12,3 +12,5 @@
(define-constant unaligned-floats #f)
(define-constant unaligned-integers #t)
(define-constant arm-isa-version 6)

View File

@ -2009,11 +2009,15 @@
(define-who asm-fence
(lambda (kind)
(lambda (code*)
(constant-case arm-isa-version
[(6)
(emit mcr 'al #b1111 #b000 `(reg . ,%r0) #b0111 #b1010 #b101 code*)]
[(7)
(case kind
[(store-store) (emit dmbishst code*)]
[(acquire) (emit dmbish code*)]
[(release) (emit dmbish code*)]
[else (sorry! who "unexpected kind ~s" kind)]))))
[else (sorry! who "unexpected kind ~s" kind)])]))))
(define asm-fp-relop
(lambda (info)