diff --git a/compiler/x86/aoptx86.pas b/compiler/x86/aoptx86.pas index 17ee900914..8a8c57f7a6 100644 --- a/compiler/x86/aoptx86.pas +++ b/compiler/x86/aoptx86.pas @@ -10326,28 +10326,6 @@ unit aoptx86; end; end; - -{$ifdef x86_64} - { Code size reduction by J. Gareth "Kit" Moreton } - { Convert MOVZBQ and MOVZWQ to MOVZBL and MOVZWL respectively if it removes the REX prefix } - if (taicpu(p).opsize in [S_BQ, S_WQ]) and - (getsupreg(taicpu(p).oper[1]^.reg) in [RS_RAX, RS_RCX, RS_RDX, RS_RBX, RS_RSI, RS_RDI, RS_RBP, RS_RSP]) - then - begin - { Has 64-bit register name and opcode suffix } - PreMessage := 'movz' + debug_opsize2str(taicpu(p).opsize) + ' ' + debug_operstr(taicpu(p).oper[0]^) + ',' + debug_regname(taicpu(p).oper[1]^.reg) + ' -> movz'; - - { The actual optimization } - setsubreg(taicpu(p).oper[1]^.reg, R_SUBD); - if taicpu(p).opsize = S_BQ then - taicpu(p).changeopsize(S_BL) - else - taicpu(p).changeopsize(S_WL); - - DebugMsg(SPeepholeOptimization + PreMessage + - debug_opsize2str(taicpu(p).opsize) + ' ' + debug_operstr(taicpu(p).oper[0]^) + ',' + debug_regname(taicpu(p).oper[1]^.reg) + ' (removes REX prefix)', p); - end; -{$endif} end; @@ -10371,20 +10349,17 @@ unit aoptx86; case taicpu(p).opsize of S_Q: begin - if (getsupreg(taicpu(p).oper[0]^.reg) in [RS_RAX, RS_RCX, RS_RDX, RS_RBX, RS_RSI, RS_RDI, RS_RBP, RS_RSP]) then - begin - RegName := debug_regname(taicpu(p).oper[0]^.reg); { 64-bit register name } - PreMessage := 'xorq ' + RegName + ',' + RegName + ' -> xorl '; + RegName := debug_regname(taicpu(p).oper[0]^.reg); { 64-bit register name } + PreMessage := 'xorq ' + RegName + ',' + RegName + ' -> xorl '; - { The actual optimization } - setsubreg(taicpu(p).oper[0]^.reg, R_SUBD); - setsubreg(taicpu(p).oper[1]^.reg, R_SUBD); - taicpu(p).changeopsize(S_L); + { The actual optimization } + setsubreg(taicpu(p).oper[0]^.reg, R_SUBD); + setsubreg(taicpu(p).oper[1]^.reg, R_SUBD); + taicpu(p).changeopsize(S_L); - RegName := debug_regname(taicpu(p).oper[0]^.reg); { 32-bit register name } + RegName := debug_regname(taicpu(p).oper[0]^.reg); { 32-bit register name } - DebugMsg(SPeepholeOptimization + PreMessage + RegName + ',' + RegName + ' (removes REX prefix)', p); - end; + DebugMsg(SPeepholeOptimization + PreMessage + RegName + ',' + RegName + ' (32-bit register recommended when zeroing 64-bit counterpart)', p); end; else ;