From 659e2746e8738b601cb48ec947f1c852f98497a6 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sat, 1 Jun 2024 22:26:40 +0200 Subject: [PATCH] Add support for AArch64 FreeBSD dynamic TLS This change is necessary to support https://github.com/php/php-src/pull/11236 for IR JIT. --- ir_aarch64.dasc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ir_aarch64.dasc b/ir_aarch64.dasc index dd695a7..11c0f32 100644 --- a/ir_aarch64.dasc +++ b/ir_aarch64.dasc @@ -5239,8 +5239,18 @@ static void ir_emit_tls(ir_ctx *ctx, ir_ref def, ir_insn *insn) ||#else || code = 0xd53bd040 | reg; // TODO: hard-coded: mrs reg, tpidr_el0 | .long code +||# ifdef __FreeBSD__ +|| if (insn->op3 == IR_NULL) { +| ldr Rx(reg), [Rx(reg), #insn->op2] +|| } else { +| ldr Rx(reg), [Rx(reg), #0] +| ldr Rx(reg), [Rx(reg), #insn->op2] +| ldr Rx(reg), [Rx(reg), #insn->op3] +|| } +||# else ||//??? IR_ASSERT(insn->op2 <= LDR_STR_PIMM64); | ldr Rx(reg), [Rx(reg), #insn->op2] +||# endif ||#endif if (IR_REG_SPILLED(ctx->regs[def][0])) { ir_emit_store(ctx, IR_ADDR, def, reg);