From 813bc74be61e910d3fe9e013d0ee5cca1cce6fd0 Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Wed, 6 Apr 2011 00:36:30 -0700 Subject: [PATCH] JIT now works on OS X! Had to fix the case where the jump table was allocated in a >4GB address. --- src/upb_decoder_x86.dasc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/upb_decoder_x86.dasc b/src/upb_decoder_x86.dasc index d3507197a0..fac0dcfcd0 100644 --- a/src/upb_decoder_x86.dasc +++ b/src/upb_decoder_x86.dasc @@ -184,7 +184,12 @@ void upb_reg_jit_gdb(void *addr, size_t size) { | and edx, 0x7 | cmp ecx, m->max_field_number // Bounds-check the field. | ja ->exit_jit // In the future; could be unknown label -| mov rax, qword [rcx*8 + m->tablearray] // TODO: support hybrid array/hash tables. +|| if ((uintptr_t)m->tablearray < 0xffffffff) { +| mov rax, qword [rcx*8 + m->tablearray] // TODO: support hybrid array/hash tables. +|| } else { +| mov64 rax, (uintptr_t)m->tablearray +| mov rax, qword [rax + rcx*8] +|| } | jmp rax // Dispatch: unpredictable jump. |.endmacro |