summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/upb_decoder_x86.dasc7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/upb_decoder_x86.dasc b/src/upb_decoder_x86.dasc
index d350719..fac0dcf 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
|
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback