Added sb instruction support for ARMv9 architecture

This commit is contained in:
Salvatore Dipietro 2025-05-01 16:19:08 -07:00
parent 852da1be15
commit 5304ab5460
4 changed files with 53 additions and 1 deletions

View file

@ -2,6 +2,7 @@
#define JEMALLOC_INTERNAL_SPIN_H
#include "jemalloc/internal/jemalloc_preamble.h"
#include "jemalloc/internal/spin_delay_arm.h"
#define SPIN_INITIALIZER {0U}
@ -11,7 +12,9 @@ typedef struct {
static inline void
spin_cpu_spinwait(void) {
# if HAVE_CPU_SPINWAIT
# if defined(__linux__) && (defined(__aarch64__) || defined(__arm64__))
spin_delay_arm();
# elif HAVE_CPU_SPINWAIT
CPU_SPINWAIT;
# else
volatile int x = 0;

View file

@ -0,0 +1,21 @@
#include "jemalloc/internal/jemalloc_preamble.h"
#include <stdatomic.h>
/* Global variable to track SB support, declared as extern to be defined in one TU */
extern _Atomic int arm_has_sb_instruction;
/* Constructor function declaration - implementation in spin_delay_arm.c */
__attribute__((constructor))
void detect_arm_sb_support(void);
/* Use SB instruction if available, otherwise ISB */
static inline void
spin_delay_arm(void) {
if (__builtin_expect(arm_has_sb_instruction == 1, 1)) {
/* SB instruction encoding */
asm volatile(".inst 0xd50330ff \n");
} else {
/* ISB instruction */
asm volatile("isb; \n");
}
}