aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2019-07-01 08:31:50 +0200
committerJan Beulich <jbeulich@suse.com>2019-07-01 08:31:50 +0200
commita80195f1224aced64392b452d55980b6bbd2a8b9 (patch)
treedf3d8a1071f7e151b437f2f245b433a6959e7d9e /gas
parenta0a1771e895e6606a2a795c407e20aed73f69bd9 (diff)
downloadgdb-a80195f1224aced64392b452d55980b6bbd2a8b9.zip
gdb-a80195f1224aced64392b452d55980b6bbd2a8b9.tar.gz
gdb-a80195f1224aced64392b452d55980b6bbd2a8b9.tar.bz2
x86: StaticRounding implies SAE
This implication allows to simplify some conditionals, thus slightly improving performance. This change also paves the way for re-using StaticRounding for non-EVEX insns.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-i386.c9
2 files changed, 8 insertions, 6 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index b969177..c6fcecb 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,10 @@
2019-07-01 Jan Beulich <jbeulich@suse.com>
+ * config/tc-i386.c (is_evex_encoding): Don't check for SAE.
+ (check_VecOperands): Simplify static rounding / SAE checking.
+
+2019-07-01 Jan Beulich <jbeulich@suse.com>
+
* config/tc-i386.c (optimize_encoding): Make j unsigned. Handle
vpand{d,q}, vpandn{d,q}, vpor{d,q}, and vpxor{d,q}. Also check/
clear broadcast. Eliminate a loop.
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index bc7d556..fe50566 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -3557,7 +3557,7 @@ is_evex_encoding (const insn_template *t)
{
return t->opcode_modifier.evex || t->opcode_modifier.disp8memshift
|| t->opcode_modifier.broadcast || t->opcode_modifier.masking
- || t->opcode_modifier.staticrounding || t->opcode_modifier.sae;
+ || t->opcode_modifier.sae;
}
static INLINE bfd_boolean
@@ -5469,11 +5469,8 @@ check_VecOperands (const insn_template *t)
/* Check RC/SAE. */
if (i.rounding)
{
- if ((i.rounding->type != saeonly
- && !t->opcode_modifier.staticrounding)
- || (i.rounding->type == saeonly
- && (t->opcode_modifier.staticrounding
- || !t->opcode_modifier.sae)))
+ if (!t->opcode_modifier.sae
+ || (i.rounding->type != saeonly && !t->opcode_modifier.staticrounding))
{
i.error = unsupported_rc_sae;
return 1;