Projects
openEuler:24.03:SP1:Everything
binutils
_service:tar_scm:LoongArch-Fixed-precedence-of-...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:LoongArch-Fixed-precedence-of-expression-operators-i.patch of Package binutils
From 75fd1d4832ec228aa66be49e24ba686bfeb5507b Mon Sep 17 00:00:00 2001 From: Lulu Cai <cailulu@loongson.cn> Date: Mon, 2 Sep 2024 12:05:54 +0800 Subject: [PATCH 119/123] LoongArch: Fixed precedence of expression operators in instructions The precedence of the operators "+" and "-" in the current loongarch instruction expression is higher than "<<" and ">>", which is different from the explanation in the user guide. We modified the precedence of "<<" and ">>" to be higher than "+" and "-". --- gas/config/loongarch-parse.y | 24 ++++++++++++------------ gas/testsuite/gas/loongarch/insn_expr.d | 10 ++++++++++ gas/testsuite/gas/loongarch/insn_expr.s | 1 + 3 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 gas/testsuite/gas/loongarch/insn_expr.d create mode 100644 gas/testsuite/gas/loongarch/insn_expr.s diff --git a/gas/config/loongarch-parse.y b/gas/config/loongarch-parse.y index f786fdae..ec5a4166 100644 --- a/gas/config/loongarch-parse.y +++ b/gas/config/loongarch-parse.y @@ -368,24 +368,24 @@ multiplicative_expression | multiplicative_expression '%' unary_expression {emit_bin ('%');} ; -additive_expression +shift_expression : multiplicative_expression - | additive_expression '+' multiplicative_expression {emit_bin ('+');} - | additive_expression '-' multiplicative_expression {emit_bin ('-');} + | shift_expression LEFT_OP multiplicative_expression {emit_bin (LEFT_OP);} + | shift_expression RIGHT_OP multiplicative_expression {emit_bin (RIGHT_OP);} ; -shift_expression - : additive_expression - | shift_expression LEFT_OP additive_expression {emit_bin (LEFT_OP);} - | shift_expression RIGHT_OP additive_expression {emit_bin (RIGHT_OP);} +additive_expression + : shift_expression + | additive_expression '+' shift_expression {emit_bin ('+');} + | additive_expression '-' shift_expression {emit_bin ('-');} ; relational_expression - : shift_expression - | relational_expression '<' shift_expression {emit_bin ('<');} - | relational_expression '>' shift_expression {emit_bin ('>');} - | relational_expression LE_OP shift_expression {emit_bin (LE_OP);} - | relational_expression GE_OP shift_expression {emit_bin (GE_OP);} + : additive_expression + | relational_expression '<' additive_expression {emit_bin ('<');} + | relational_expression '>' additive_expression {emit_bin ('>');} + | relational_expression LE_OP additive_expression {emit_bin (LE_OP);} + | relational_expression GE_OP additive_expression {emit_bin (GE_OP);} ; equality_expression diff --git a/gas/testsuite/gas/loongarch/insn_expr.d b/gas/testsuite/gas/loongarch/insn_expr.d new file mode 100644 index 00000000..9abc711a --- /dev/null +++ b/gas/testsuite/gas/loongarch/insn_expr.d @@ -0,0 +1,10 @@ +#as: +#objdump: -d + +.*: file format .* + + +Disassembly of section \.text: + +0+ <\.text>: + 0: 02c00ca4 addi.d \$a0, \$a1, 3 diff --git a/gas/testsuite/gas/loongarch/insn_expr.s b/gas/testsuite/gas/loongarch/insn_expr.s new file mode 100644 index 00000000..3b9ef08a --- /dev/null +++ b/gas/testsuite/gas/loongarch/insn_expr.s @@ -0,0 +1 @@ +addi.d $a0,$a1,(8 >> 2 + 1) -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2