From 3f97bff6aca06eaeb6999b094f2ba241de31fc0e Mon Sep 17 00:00:00 2001 From: Drahflow Date: Sat, 11 Apr 2015 01:24:38 +0200 Subject: Correctly handle negative indices during optimization --- elymas/lib/sys/opt.ey | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/elymas/lib/sys/opt.ey b/elymas/lib/sys/opt.ey index df3d210..4b46de4 100644 --- a/elymas/lib/sys/opt.ey +++ b/elymas/lib/sys/opt.ey @@ -891,8 +891,11 @@ /rsi /ecx :movlMemReg 3 /rcx :shrqImm8Reg /rcx :decqReg - /rdx /rdx :xorqRegReg # FIXME: Is this correct? - /rcx :divqReg + :cqo + /rcx :idivqReg + 0 /rdx :cmpqImm8Reg + [ /rcx /rdx :addqRegReg ] len :jgeRel8 + /rcx /rdx :addqRegReg 8 8 /rdx /rsi :pushqMemIndexScaleDisp8 ] emitOpcodes } @@ -905,8 +908,11 @@ [ 8 /rax /rax :movqMemDisp8Reg ] len :jcRel8 8 /rax /rax :movqMemDisp8Reg 16 /rsi /rcx :movqMemDisp8Reg - /rdx /rdx :xorqRegReg - /rcx :divqReg # FIXME: Is this correct? + :cqo + /rcx :idivqReg + 0 /rdx :cmpqImm8Reg + [ /rcx /rdx :addqRegReg ] len :jgeRel8 + /rcx /rdx :addqRegReg 24 1 /rdx /rsi /rbx :movzxMem8IndexScaleDisp8Reg64 63 /rbx :btsqImm8Reg /rbx :pushqReg -- cgit v1.2.3