From cb10e79a50a08ffb6d8345159d4ccd864458c105 Mon Sep 17 00:00:00 2001
From: Richard Sandiford <rdsandiford@googlemail.com>
Date: Wed, 14 Jan 2004 10:05:00 +0000
Subject: [PATCH] cpu/ 	* frv.cpu (UNIT): Add IACC. 	(iacc-multiply-r-r):
 Use it. 	* frv.opc (fr400_unit_mapping): Add entry for IACC. 
 (fr500_unit_mapping, fr550_unit_mapping): Likewise.

opcodes/
	* frv-desc.h: Regenerate.
	* frv-desc.c: Regenerate.
	* frv-opc.c: Regenerate.
---
 cpu/ChangeLog      | 7 +++++++
 cpu/frv.cpu        | 5 +++--
 cpu/frv.opc        | 5 ++++-
 opcodes/ChangeLog  | 6 ++++++
 opcodes/frv-desc.c | 7 ++++---
 opcodes/frv-desc.h | 6 +++---
 opcodes/frv-opc.c  | 3 +++
 7 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/cpu/ChangeLog b/cpu/ChangeLog
index bae9cccc4ee..00a4a1f1024 100644
--- a/cpu/ChangeLog
+++ b/cpu/ChangeLog
@@ -1,3 +1,10 @@
+2004-01-14  Richard Sandiford  <rsandifo@redhat.com>
+
+	* frv.cpu (UNIT): Add IACC.
+	(iacc-multiply-r-r): Use it.
+	* frv.opc (fr400_unit_mapping): Add entry for IACC.
+	(fr500_unit_mapping, fr550_unit_mapping): Likewise.
+
 2004-01-06  Alexandre Oliva  <aoliva@redhat.com>
 
 	2003-12-19  Alexandre Oliva  <aoliva@redhat.com>
diff --git a/cpu/frv.cpu b/cpu/frv.cpu
index f7bb2960eaa..28e78338387 100644
--- a/cpu/frv.cpu
+++ b/cpu/frv.cpu
@@ -1,6 +1,6 @@
 ; Fujitsu FRV opcode support, for GNU Binutils.  -*- Scheme -*-
 ;
-; Copyright 2000, 2001, 2003 Free Software Foundation, Inc.
+; Copyright 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
 ;
 ; Contributed by Red Hat Inc; developed under contract from Fujitsu.
 ;
@@ -1388,6 +1388,7 @@
 	  B0 B1 B01
 	  C
 	  MULT-DIV ; multiply/division slotted differently on different machines
+	  IACC     ; iacc multiply     slotted differently on different machines
 	  LOAD     ; loads             slotted differently on different machines
 	  STORE    ; store             slotted differently on different machines
 	  SCAN     ; scan, scani       slotted differently on different machines
@@ -3118,7 +3119,7 @@
 (define-pmacro (iacc-multiply-r-r name operation op ope comment)
   (dni name
        (comment)
-       ((UNIT MULT-DIV) (FR400-MAJOR I-1) (MACH fr400))
+       ((UNIT IACC) (FR400-MAJOR I-1) (MACH fr400))
        (.str name "$pack $GRi,$GRj")
        (+ pack (rd-null) op GRi ope GRj)
        ((.sym iacc- operation) (mul DI (ext DI GRi) (ext DI GRj)))
diff --git a/cpu/frv.opc b/cpu/frv.opc
index 92b55867ee1..03c0f3e1437 100644
--- a/cpu/frv.opc
+++ b/cpu/frv.opc
@@ -1,6 +1,6 @@
 /* Fujitsu FRV opcode support, for GNU Binutils.  -*- C -*-
 
-   Copyright 2000, 2001, 2003 Free Software Foundation, Inc.
+   Copyright 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
 
    Contributed by Red Hat Inc; developed under contract from Fujitsu.
 
@@ -285,6 +285,7 @@ static CGEN_ATTR_VALUE_TYPE fr400_unit_mapping[] =
 /* B01      */     UNIT_B0,
 /* C        */     UNIT_C,
 /* MULT-DIV */     UNIT_I0,  /* multiply and divide only in I0  unit.  */
+/* IACC     */     UNIT_I01, /* iacc multiply       in I0 or I1 unit.  */
 /* LOAD     */     UNIT_I0,  /* load                only in I0  unit.  */
 /* STORE    */     UNIT_I0,  /* store               only in I0  unit.  */
 /* SCAN     */     UNIT_I0,  /* scan                only in I0  unit.  */
@@ -315,6 +316,7 @@ static CGEN_ATTR_VALUE_TYPE fr500_unit_mapping[] =
 /* B01      */     UNIT_B01,
 /* C        */     UNIT_C,
 /* MULT-DIV */     UNIT_I01, /* multiply and divide in I0 or I1 unit.  */
+/* IACC     */     UNIT_NIL, /* iacc multiply       not implemented */
 /* LOAD     */     UNIT_I01, /* load                in I0 or I1 unit.  */
 /* STORE    */     UNIT_I0,  /* store               only in I0 unit.  */
 /* SCAN     */     UNIT_I01, /* scan                in I0 or I1 unit.  */
@@ -345,6 +347,7 @@ static CGEN_ATTR_VALUE_TYPE fr550_unit_mapping[] =
 /* B01      */     UNIT_B01,
 /* C        */     UNIT_C,
 /* MULT-DIV */     UNIT_I01,  /* multiply and divide in I0 or I1 unit.    */
+/* IACC     */     UNIT_NIL,  /* iacc multiply       not implemented.     */
 /* LOAD     */     UNIT_I01,  /* load                in I0 or I1 unit.    */
 /* STORE    */     UNIT_I01,  /* store               in I0 or I1 unit.    */
 /* SCAN     */     UNIT_IALL, /* scan                in any integer unit. */
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 747ca77ff61..b972bfa3d48 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,9 @@
+2004-01-14  Richard Sandiford  <rsandifo@redhat.com>
+
+	* frv-desc.h: Regenerate.
+	* frv-desc.c: Regenerate.
+	* frv-opc.c: Regenerate.
+
 2004-01-13  Michael Snyder  <msnyder@redhat.com>
 
 	* sh-dis.c (print_insn_sh): Allocate 4 bytes for insn.
diff --git a/opcodes/frv-desc.c b/opcodes/frv-desc.c
index 9cc85fef499..35659c7b420 100644
--- a/opcodes/frv-desc.c
+++ b/opcodes/frv-desc.c
@@ -84,6 +84,7 @@ static const CGEN_ATTR_ENTRY UNIT_attr[] =
   { "B01", UNIT_B01 },
   { "C", UNIT_C },
   { "MULT_DIV", UNIT_MULT_DIV },
+  { "IACC", UNIT_IACC },
   { "LOAD", UNIT_LOAD },
   { "STORE", UNIT_STORE },
   { "SCAN", UNIT_SCAN },
@@ -2397,17 +2398,17 @@ static const CGEN_IBASE frv_cgen_insn_table[MAX_INSNS] =
 /* smu$pack $GRi,$GRj */
   {
     FRV_INSN_SMU, "smu", "smu", 32,
-    { 0, { (1<<MACH_FR400), UNIT_MULT_DIV, FR400_MAJOR_I_1, FR500_MAJOR_NONE, FR550_MAJOR_NONE } }
+    { 0, { (1<<MACH_FR400), UNIT_IACC, FR400_MAJOR_I_1, FR500_MAJOR_NONE, FR550_MAJOR_NONE } }
   },
 /* smass$pack $GRi,$GRj */
   {
     FRV_INSN_SMASS, "smass", "smass", 32,
-    { 0, { (1<<MACH_FR400), UNIT_MULT_DIV, FR400_MAJOR_I_1, FR500_MAJOR_NONE, FR550_MAJOR_NONE } }
+    { 0, { (1<<MACH_FR400), UNIT_IACC, FR400_MAJOR_I_1, FR500_MAJOR_NONE, FR550_MAJOR_NONE } }
   },
 /* smsss$pack $GRi,$GRj */
   {
     FRV_INSN_SMSSS, "smsss", "smsss", 32,
-    { 0, { (1<<MACH_FR400), UNIT_MULT_DIV, FR400_MAJOR_I_1, FR500_MAJOR_NONE, FR550_MAJOR_NONE } }
+    { 0, { (1<<MACH_FR400), UNIT_IACC, FR400_MAJOR_I_1, FR500_MAJOR_NONE, FR550_MAJOR_NONE } }
   },
 /* sll$pack $GRi,$GRj,$GRk */
   {
diff --git a/opcodes/frv-desc.h b/opcodes/frv-desc.h
index 5f72800379d..f46c3f957c1 100644
--- a/opcodes/frv-desc.h
+++ b/opcodes/frv-desc.h
@@ -549,9 +549,9 @@ typedef enum unit_attr {
  , UNIT_I2, UNIT_I3, UNIT_IALL, UNIT_FM0
  , UNIT_FM1, UNIT_FM01, UNIT_FM2, UNIT_FM3
  , UNIT_FMALL, UNIT_FMLOW, UNIT_B0, UNIT_B1
- , UNIT_B01, UNIT_C, UNIT_MULT_DIV, UNIT_LOAD
- , UNIT_STORE, UNIT_SCAN, UNIT_DCPL, UNIT_MDUALACC
- , UNIT_MCLRACC_1, UNIT_NUM_UNITS
+ , UNIT_B01, UNIT_C, UNIT_MULT_DIV, UNIT_IACC
+ , UNIT_LOAD, UNIT_STORE, UNIT_SCAN, UNIT_DCPL
+ , UNIT_MDUALACC, UNIT_MCLRACC_1, UNIT_NUM_UNITS
 } UNIT_ATTR;
 
 /* Enum declaration for fr400 major insn categories.  */
diff --git a/opcodes/frv-opc.c b/opcodes/frv-opc.c
index 61bdb4530eb..1560d207dce 100644
--- a/opcodes/frv-opc.c
+++ b/opcodes/frv-opc.c
@@ -239,6 +239,7 @@ static CGEN_ATTR_VALUE_TYPE fr400_unit_mapping[] =
 /* B01      */     UNIT_B0,
 /* C        */     UNIT_C,
 /* MULT-DIV */     UNIT_I0,  /* multiply and divide only in I0  unit.  */
+/* IACC     */     UNIT_I01, /* iacc multiply       in I0 or I1 unit.  */
 /* LOAD     */     UNIT_I0,  /* load                only in I0  unit.  */
 /* STORE    */     UNIT_I0,  /* store               only in I0  unit.  */
 /* SCAN     */     UNIT_I0,  /* scan                only in I0  unit.  */
@@ -269,6 +270,7 @@ static CGEN_ATTR_VALUE_TYPE fr500_unit_mapping[] =
 /* B01      */     UNIT_B01,
 /* C        */     UNIT_C,
 /* MULT-DIV */     UNIT_I01, /* multiply and divide in I0 or I1 unit.  */
+/* IACC     */     UNIT_NIL, /* iacc multiply       not implemented */
 /* LOAD     */     UNIT_I01, /* load                in I0 or I1 unit.  */
 /* STORE    */     UNIT_I0,  /* store               only in I0 unit.  */
 /* SCAN     */     UNIT_I01, /* scan                in I0 or I1 unit.  */
@@ -299,6 +301,7 @@ static CGEN_ATTR_VALUE_TYPE fr550_unit_mapping[] =
 /* B01      */     UNIT_B01,
 /* C        */     UNIT_C,
 /* MULT-DIV */     UNIT_I01,  /* multiply and divide in I0 or I1 unit.    */
+/* IACC     */     UNIT_NIL,  /* iacc multiply       not implemented.     */
 /* LOAD     */     UNIT_I01,  /* load                in I0 or I1 unit.    */
 /* STORE    */     UNIT_I01,  /* store               in I0 or I1 unit.    */
 /* SCAN     */     UNIT_IALL, /* scan                in any integer unit. */
-- 
GitLab