blob: 3f52e879956e1429259a9f3c1ea2c8288e8dc500 [file] [log] [blame]
From 2bb5cef1a85d63ebf155bcb0070492b0ad298dd8 Mon Sep 17 00:00:00 2001
From: Nagaraju Mekala <nmekala@xilix.com>
Date: Tue, 9 Oct 2018 10:07:08 +0530
Subject: [PATCH 36/54] -Added double arith instructions -Fixed prologue stack
pointer decrement issue
---
gcc/config/microblaze/microblaze.md | 78 +++++++++++++++++++++++++----
gcc/config/microblaze/t-microblaze | 7 +++
2 files changed, 76 insertions(+), 9 deletions(-)
diff --git a/gcc/config/microblaze/microblaze.md b/gcc/config/microblaze/microblaze.md
index 74bb30cb9e8..1401d6b77ff 100644
--- a/gcc/config/microblaze/microblaze.md
+++ b/gcc/config/microblaze/microblaze.md
@@ -527,6 +527,66 @@
(set_attr "mode" "SF")
(set_attr "length" "4")])
+(define_insn "fix_truncsfsi2"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (fix:SI (match_operand:SF 1 "register_operand" "d")))]
+ "TARGET_HARD_FLOAT && TARGET_FLOAT_CONVERT"
+ "fint\t%0,%1"
+ [(set_attr "type" "fint")
+ (set_attr "mode" "SF")
+ (set_attr "length" "4")])
+
+
+(define_insn "adddf3"
+ [(set (match_operand:DF 0 "register_operand" "=d")
+ (plus:DF (match_operand:DF 1 "register_operand" "d")
+ (match_operand:DF 2 "register_operand" "d")))]
+ "TARGET_MB_64"
+ "dadd\t%0,%1,%2"
+ [(set_attr "type" "fadd")
+ (set_attr "mode" "DF")
+ (set_attr "length" "4")])
+
+(define_insn "subdf3"
+ [(set (match_operand:DF 0 "register_operand" "=d")
+ (minus:DF (match_operand:DF 1 "register_operand" "d")
+ (match_operand:DF 2 "register_operand" "d")))]
+ "TARGET_MB_64"
+ "drsub\t%0,%2,%1"
+ [(set_attr "type" "frsub")
+ (set_attr "mode" "DF")
+ (set_attr "length" "4")])
+
+(define_insn "muldf3"
+ [(set (match_operand:DF 0 "register_operand" "=d")
+ (mult:DF (match_operand:DF 1 "register_operand" "d")
+ (match_operand:DF 2 "register_operand" "d")))]
+ "TARGET_MB_64"
+ "dmul\t%0,%1,%2"
+ [(set_attr "type" "fmul")
+ (set_attr "mode" "DF")
+ (set_attr "length" "4")])
+
+(define_insn "divdf3"
+ [(set (match_operand:DF 0 "register_operand" "=d")
+ (div:DF (match_operand:DF 1 "register_operand" "d")
+ (match_operand:DF 2 "register_operand" "d")))]
+ "TARGET_MB_64"
+ "ddiv\t%0,%2,%1"
+ [(set_attr "type" "fdiv")
+ (set_attr "mode" "DF")
+ (set_attr "length" "4")])
+
+
+(define_insn "sqrtdf2"
+ [(set (match_operand:DF 0 "register_operand" "=d")
+ (sqrt:DF (match_operand:DF 1 "register_operand" "d")))]
+ "TARGET_MB_64"
+ "dsqrt\t%0,%1"
+ [(set_attr "type" "fsqrt")
+ (set_attr "mode" "DF")
+ (set_attr "length" "4")])
+
(define_insn "floatdidf2"
[(set (match_operand:DF 0 "register_operand" "=d")
(float:DF (match_operand:DI 1 "register_operand" "d")))]
@@ -536,13 +596,13 @@
(set_attr "mode" "DF")
(set_attr "length" "4")])
-(define_insn "fix_truncsfsi2"
- [(set (match_operand:SI 0 "register_operand" "=d")
- (fix:SI (match_operand:SF 1 "register_operand" "d")))]
- "TARGET_HARD_FLOAT && TARGET_FLOAT_CONVERT"
- "fint\t%0,%1"
- [(set_attr "type" "fint")
- (set_attr "mode" "SF")
+(define_insn "floatdfdi2"
+ [(set (match_operand:DI 0 "register_operand" "=d")
+ (float:DI (match_operand:DF 1 "register_operand" "d")))]
+ "TARGET_MB_64"
+ "dlong\t%0,%1"
+ [(set_attr "type" "fcvt")
+ (set_attr "mode" "DI")
(set_attr "length" "4")])
;;----------------------------------------------------------------
@@ -660,8 +720,8 @@
"TARGET_MB_64"
"@
rsubl\t%0,%2,%1
- addik\t%0,%z1,-%2
- addik\t%0,%z1,-%2"
+ addlik\t%0,%z1,-%2
+ addlik\t%0,%z1,-%2"
[(set_attr "type" "arith,no_delay_arith,no_delay_arith")
(set_attr "mode" "DI")
(set_attr "length" "4,4,4")])
diff --git a/gcc/config/microblaze/t-microblaze b/gcc/config/microblaze/t-microblaze
index 35ab9654052..dfef45c268e 100644
--- a/gcc/config/microblaze/t-microblaze
+++ b/gcc/config/microblaze/t-microblaze
@@ -1,6 +1,13 @@
MULTILIB_OPTIONS = m64 mxl-barrel-shift mlittle-endian mno-xl-soft-mul mxl-multiply-high
MULTILIB_DIRNAMES = m64 bs le m mh
MULTILIB_EXCEPTIONS = *m64/mxl-multiply-high mxl-multiply-high
+MULTILIB_EXCEPTIONS += *m64
+MULTILIB_EXCEPTIONS += *m64/mxl-barrel-shift
+MULTILIB_EXCEPTIONS += *m64/mno-xl-soft-mul
+MULTILIB_EXCEPTIONS += *m64/mxl-barrel-shift/mno-xl-soft-mul
+MULTILIB_EXCEPTIONS += *m64/mno-xl-soft-mul
+MULTILIB_EXCEPTIONS += *m64/mxl-barrel-shift/mno-xl-soft-mul/mxl-multiply-high
+MULTILIB_EXCEPTIONS += *m64/mno-xl-soft-mul/mxl-multiply-high
MULTILIB_EXCEPTIONS += *mxl-barrel-shift/mxl-multiply-high mxl-multiply-high
MULTILIB_EXCEPTIONS += *mlittle-endian/mxl-multiply-high mxl-multiply-high
MULTILIB_EXCEPTIONS += *m64/mxl-barrel-shift/mlittle-endian/mxl-multiply-high
--
2.17.1