[gem5-dev] Change in gem5/gem5[master]: arch-x86,cpu: Fix bpred by annotating branch instructions in x86
Jason Lowe-Power has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/27972 ) Change subject: arch-x86,cpu: Fix bpred by annotating branch instructions in x86 .. arch-x86,cpu: Fix bpred by annotating branch instructions in x86 Original Creator: Adria Armejach. Branch instructions needed to be annotated in x86 as direct/indirect and conditional/unconditional. These annotations where not present causing the branch predictor to misbehave, not using the BTB. In addition, logic to determine the real branch target at decode needed to be added as it was also missing. Change-Id: I91e707452c1825b9bb4ae75c3f599da489ae5b9a Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27972 Reviewed-by: Gabe Black Maintainer: Gabe Black Tested-by: kokoro --- M src/arch/x86/isa/insts/general_purpose/control_transfer/call.py M src/arch/x86/isa/insts/general_purpose/control_transfer/conditional_jump.py M src/arch/x86/isa/insts/general_purpose/control_transfer/jump.py M src/arch/x86/isa/insts/general_purpose/control_transfer/loop.py M src/arch/x86/isa/insts/general_purpose/control_transfer/xreturn.py M src/arch/x86/isa/macroop.isa M src/arch/x86/isa/microops/regop.isa M src/arch/x86/isa/microops/seqop.isa M src/cpu/o3/decode_impl.hh 9 files changed, 113 insertions(+), 6 deletions(-) Approvals: Gabe Black: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/arch/x86/isa/insts/general_purpose/control_transfer/call.py b/src/arch/x86/isa/insts/general_purpose/control_transfer/call.py index c58152c..edc0007 100644 --- a/src/arch/x86/isa/insts/general_purpose/control_transfer/call.py +++ b/src/arch/x86/isa/insts/general_purpose/control_transfer/call.py @@ -41,6 +41,7 @@ # Make the default data size of calls 64 bits in 64 bit mode .adjust_env oszIn64Override .function_call +.control_direct limm t1, imm rdip t7 @@ -55,6 +56,7 @@ # Make the default data size of calls 64 bits in 64 bit mode .adjust_env oszIn64Override .function_call +.control_indirect rdip t1 # Check target of call @@ -68,6 +70,7 @@ # Make the default data size of calls 64 bits in 64 bit mode .adjust_env oszIn64Override .function_call +.control_indirect rdip t7 ld t1, seg, sib, disp @@ -82,6 +85,7 @@ # Make the default data size of calls 64 bits in 64 bit mode .adjust_env oszIn64Override .function_call +.control_indirect rdip t7 ld t1, seg, riprel, disp diff --git a/src/arch/x86/isa/insts/general_purpose/control_transfer/conditional_jump.py b/src/arch/x86/isa/insts/general_purpose/control_transfer/conditional_jump.py index 87b2e6a..f92935d 100644 --- a/src/arch/x86/isa/insts/general_purpose/control_transfer/conditional_jump.py +++ b/src/arch/x86/isa/insts/general_purpose/control_transfer/conditional_jump.py @@ -40,6 +40,7 @@ { # Make the defualt data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -50,6 +51,7 @@ { # Make the defualt data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -60,6 +62,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -70,6 +73,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -80,6 +84,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -90,6 +95,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -100,6 +106,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -110,6 +117,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -120,6 +128,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -130,6 +139,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -140,6 +150,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -150,6 +161,7 @@ { # Make the default data size of jumps 64 bits
[gem5-dev] Change in gem5/gem5[master]: arch-x86, cpu: Fix bpred by annotating branch instructions in x86
Juan Manuel Cebrián González has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/27972 ) Change subject: arch-x86,cpu: Fix bpred by annotating branch instructions in x86 .. arch-x86,cpu: Fix bpred by annotating branch instructions in x86 Original Creator: Adria Armejach. Branch instructions needed to be annotated in x86 as direct/indirect and conditional/unconditional. These annotations where not present causing the branch predictor to misbehave, not using the BTB. In addition, logic to determine the real branch target at decode needed to be added as it was also missing. Change-Id: I91e707452c1825b9bb4ae75c3f599da489ae5b9a --- M src/arch/x86/isa/insts/general_purpose/control_transfer/call.py M src/arch/x86/isa/insts/general_purpose/control_transfer/conditional_jump.py M src/arch/x86/isa/insts/general_purpose/control_transfer/jump.py M src/arch/x86/isa/insts/general_purpose/control_transfer/loop.py M src/arch/x86/isa/insts/general_purpose/control_transfer/xreturn.py M src/arch/x86/isa/macroop.isa M src/arch/x86/isa/microops/regop.isa M src/arch/x86/isa/microops/seqop.isa M src/cpu/o3/decode_impl.hh 9 files changed, 112 insertions(+), 6 deletions(-) diff --git a/src/arch/x86/isa/insts/general_purpose/control_transfer/call.py b/src/arch/x86/isa/insts/general_purpose/control_transfer/call.py index c58152c..edc0007 100644 --- a/src/arch/x86/isa/insts/general_purpose/control_transfer/call.py +++ b/src/arch/x86/isa/insts/general_purpose/control_transfer/call.py @@ -41,6 +41,7 @@ # Make the default data size of calls 64 bits in 64 bit mode .adjust_env oszIn64Override .function_call +.control_direct limm t1, imm rdip t7 @@ -55,6 +56,7 @@ # Make the default data size of calls 64 bits in 64 bit mode .adjust_env oszIn64Override .function_call +.control_indirect rdip t1 # Check target of call @@ -68,6 +70,7 @@ # Make the default data size of calls 64 bits in 64 bit mode .adjust_env oszIn64Override .function_call +.control_indirect rdip t7 ld t1, seg, sib, disp @@ -82,6 +85,7 @@ # Make the default data size of calls 64 bits in 64 bit mode .adjust_env oszIn64Override .function_call +.control_indirect rdip t7 ld t1, seg, riprel, disp diff --git a/src/arch/x86/isa/insts/general_purpose/control_transfer/conditional_jump.py b/src/arch/x86/isa/insts/general_purpose/control_transfer/conditional_jump.py index 87b2e6a..f92935d 100644 --- a/src/arch/x86/isa/insts/general_purpose/control_transfer/conditional_jump.py +++ b/src/arch/x86/isa/insts/general_purpose/control_transfer/conditional_jump.py @@ -40,6 +40,7 @@ { # Make the defualt data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -50,6 +51,7 @@ { # Make the defualt data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -60,6 +62,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -70,6 +73,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -80,6 +84,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -90,6 +95,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -100,6 +106,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -110,6 +117,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -120,6 +128,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -130,6 +139,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -140,6 +150,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -150,6 +161,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +.control_direct rdip t1 limm t2, imm @@ -160,6 +172,7 @@ { # Make the default data size of jumps 64 bits in 64 bit mode .adjust_env oszIn64Override +