[gem5-dev] Change in gem5/gem5[master]: arch-x86,cpu: Fix bpred by annotating branch instructions in x86

2020-05-01 Thread Jason Lowe-Power (Gerrit) via gem5-dev
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

2020-04-21 Thread Juan Manuel Cebrián González (Gerrit)
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
+