From ae1f22bc196de900b07b51634992f06caaa01832 Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Wed, 23 Sep 2009 08:17:57 +0000 Subject: [PATCH] Implement binary emitter for LdTls. [r26633] --- ir/be/ia32/ia32_emitter.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ir/be/ia32/ia32_emitter.c b/ir/be/ia32/ia32_emitter.c index e2bf030c7..9fd943937 100644 --- a/ir/be/ia32/ia32_emitter.c +++ b/ir/be/ia32/ia32_emitter.c @@ -2906,6 +2906,20 @@ static void bemit_set(const ir_node *node) bemit_modru(get_out_reg(node, pn_ia32_Set_res), 2); } +static void bemit_ldtls(const ir_node *node) +{ + const arch_register_t *out = get_out_reg(node, 0); + + bemit8(0x65); // gs: + if (out->index == REG_EAX) { + bemit8(0xA1); // movl 0, %eax + } else { + bemit8(0x8B); // movl 0, %reg + bemit8(MOD_IND | ENC_REG(out->index) | ENC_RM(0x05)); + } + bemit32(0); +} + /** * Emit a Lea. */ @@ -3681,6 +3695,7 @@ static void ia32_register_binary_emitters(void) register_emitter(op_ia32_IncMem, bemit_incmem); register_emitter(op_ia32_Jcc, bemit_ia32_jcc); register_emitter(op_ia32_Jmp, bemit_jump); + register_emitter(op_ia32_LdTls, bemit_ldtls); register_emitter(op_ia32_Lea, bemit_lea); register_emitter(op_ia32_Load, bemit_load); register_emitter(op_ia32_Mul, bemit_mul); -- 2.20.1