SH gas configure and ld tests
[deliverable/binutils-gdb.git] / cpu / or1kcommon.cpu
index 86d440c3850d3f916eb4095ec103e71cccb44a56..9f102c93a18ad3f03595ab8ef7bbe5bf550ba198 100644 (file)
@@ -1,7 +1,8 @@
 ; OpenRISC 1000 32-bit CPU hardware description.  -*- Scheme -*-
-; Copyright 2000-2014 Free Software Foundation, Inc.
+; Copyright 2000-2019 Free Software Foundation, Inc.
 ; Contributed for OR32 by Johan Rydberg, jrydberg@opencores.org
 ; Modified by Julius Baxter, juliusbaxter@gmail.com
+; Modified by Andrey Bacherov, avbacherov@opencores.org
 ;
 ; This program is free software; you can redistribute it and/or modify
 ; it under the terms of the GNU General Public License as published by
    (fp 2))
   )
 
-(define-hardware
-  (name h-fsr)
-  (comment "floating point registers (single, virtual)")
-  (attrs VIRTUAL (MACH ORFPX32-MACHS))
-  (type register SF (32))
-  (indices keyword "" REG-INDICES)
-  (get (index) (subword SF (trunc SI (reg h-gpr index)) 0))
-  (set (index newval) (set UWI (reg h-gpr index) (zext UWI (subword SI newval 0))))
-  )
-
-(define-hardware
-  (name h-fdr) (comment "floating point registers (double, virtual)")
-  (attrs VIRTUAL (MACH ORFPX64-MACHS))
-  (type register DF (32))
-  (indices keyword "" REG-INDICES)
-  (get (index) (subword DF (trunc DI (reg h-gpr index)) 0))
-  (set (index newval) (set UDI (reg h-gpr index) (zext UDI (subword DI newval 0))))
-  )
-
+;
+; Hardware: [S]pecial [P]urpose [R]egisters
+;
 (define-hardware
   (name h-spr) (comment "special purpose registers")
   (attrs VIRTUAL (MACH ORBIS-MACHS))
   (or (sll UWI (enum UWI (.sym "SPR-GROUP-" spr-group)) spr-shift)
       (enum UWI (.sym "SPR-INDEX-" spr-group "-" spr-index))))
 
+;
+; Hardware: [G]enepral  [P]urpose [R]egisters
+;
 (define-hardware
   (name h-gpr) (comment "general registers")
   (attrs (MACH ORBIS-MACHS))
   (set (index newval) (set UWI (reg UWI h-spr (add index (spr-address SYS GPR0))) newval))
   )
 
+;
+; Hardware: virtual registerts for FPU (single precision)
+;           mapped to GPRs
+;
+(define-hardware
+  (name h-fsr)
+  (comment "floating point registers (single, virtual)")
+  (attrs VIRTUAL (MACH ORFPX32-MACHS))
+  (type register SF (32))
+  (indices keyword "" REG-INDICES)
+  (get (index) (subword SF (trunc SI (reg h-gpr index)) 0))
+  (set (index newval) (set UWI (reg h-gpr index) (zext UWI (subword SI newval 0))))
+  )
+
+;
+; Register pairs are offset by 2 for registers r16 and above.  This is to
+; be able to allow registers to be call saved in GCC across function calls.
+;
+(define-pmacro (reg-pair-reg-lo index)
+  (and index (const #x1f))
+)
+
+(define-pmacro (reg-pair-reg-hi index)
+  (add (and index (const #x1f))
+       (if (eq (sra index (const 5))
+              (const 1))
+          (const 2)
+          (const 1)
+        )
+    )
+)
+
+;
+; Hardware: vrtual registers for double precision floating point
+;           operands on 32-bit machines
+;           mapped to GPRs
+;
+(define-hardware
+  (name h-fd32r)
+  (comment "or32 floating point registers (double, virtual)")
+  (attrs VIRTUAL (MACH ORFPX64A32-MACHS))
+  (type register DF (32))
+  (get (index) (join DF SI
+                        (reg h-gpr (reg-pair-reg-lo index))
+                        (reg h-gpr (reg-pair-reg-hi index))))
+  (set (index newval)
+       (sequence ()
+                 (set (reg h-gpr (reg-pair-reg-lo index)) (subword SI newval 0))
+                 (set (reg h-gpr (reg-pair-reg-hi index))
+                                 (subword SI newval 1))))
+)
+
+;
+; Hardware: vrtual 64-bit integer registers for conversions
+;           float64 <-> int64 on 32-bit machines
+;           mapped to GPRs
+;
+(define-hardware
+  (name h-i64r)
+  (comment "or32 double word registers (int64, virtual)")
+  (attrs VIRTUAL (MACH ORFPX64A32-MACHS))
+  (type register DI (32))
+  (get (index) (join DI SI
+                        (reg h-gpr (reg-pair-reg-lo index))
+                        (reg h-gpr (reg-pair-reg-hi index))))
+  (set (index newval)
+       (sequence ()
+                 (set (reg h-gpr (reg-pair-reg-lo index)) (subword SI newval 0))
+                 (set (reg h-gpr (reg-pair-reg-hi index))
+                                 (subword SI newval 1))))
+)
+
+
 (define-normal-enum
   except-number
   "Exception numbers"
 
 (define-normal-enum
   spr-reg-indices
-  "special purpose register indicies"
+  "special purpose register indices"
   ()
   SPR-INDEX-
   (.map (.pmacro (args)
This page took 0.025251 seconds and 4 git commands to generate.