158
158
;; Same as above but to be used by mov conditional
159
159
(define_mode_attr mcctab [ (QI "") (HI "") (SI "") (DI "l")] )
160
160
161
+ ;; Give the number of bits-1 in the mode
162
+ (define_mode_attr sizen [ (QI "7") (HI "15") (SI "31") (DI "63")] )
163
+
161
164
;; -------------------------------------------------------------------
162
165
;; Code Attributes
163
166
;; -------------------------------------------------------------------
@@ -937,10 +940,10 @@ umod, umodl, unknown, xbfu, xor, xorl"
937
940
;; ""
938
941
;; )
939
942
940
- (define_insn "* arc64_zero_extend _ <mode >_ to_si "
941
- [ (set (match_operand: SI 0 "register_operand" "=q,r,q,r")
942
- (zero_extend: SI
943
- (match_operand: SHORT 1 "nonimmediate_operand" "q,r,Uldms,m")))]
943
+ (define_insn "* zero_extend <mode >si2 "
944
+ [ (set (match_operand: SI 0 "register_operand" "=q,r, q,r")
945
+ (zero_extend: SI
946
+ (match_operand: SHORT 1 "nonimmediate_operand" "q,r,Uldms,m")))]
944
947
""
945
948
"@
946
949
ext<exttab >_ s\\ t%0,%1
@@ -950,60 +953,41 @@ umod, umodl, unknown, xbfu, xor, xorl"
950
953
[ (set_attr "type" "sex,sex,ld,ld")
951
954
(set_attr "length" "2,4,2,* ")] )
952
955
953
- (define_insn "* arc64_zero_extend_si_to_di"
954
- [ (set (match_operand: DI 0 "register_operand" "=r,q,r")
955
- (zero_extend: DI
956
- (match_operand: SI 1 "nonimmediate_operand" "r,Uldms,m")))
957
- ]
956
+ (define_insn "* zero_extend<mode >di2"
957
+ [ (set (match_operand: DI 0 "register_operand" "=r, q,r")
958
+ (zero_extend: DI
959
+ (match_operand: EXT 1 "nonimmediate_operand" "r,Uldms,m")))]
958
960
""
959
961
"@
960
- bmskl\\ t%0,%1,31
961
- ld_s\\ t%0,%1
962
- ld%U1\\ t%0,%1"
963
- [ (set_attr "type" "and,ld,ld")
964
- (set_attr "length" "4,2,* ")]
965
- )
966
-
967
- (define_insn "* arc64_zero_extend_qi_to_di"
968
- [ (set (match_operand: DI 0 "register_operand" "=r, q,r")
969
- (zero_extend: DI
970
- (match_operand: QI 1 "nonimmediate_operand" "r,Uldms,m")))
971
- ]
972
- ""
973
- "@
974
- bmskl\\ t%0,%1,7
975
- ldb_s\\ t%0,%1
976
- ldb%U1\\ t%0,%1"
962
+ bmskl\\ t%0,%1,<sizen >
963
+ ld<sfxtab >_ s\\ t%0,%1
964
+ ld<sfxtab >%U1\\ t%0,%1"
977
965
[ (set_attr "type" "and,ld,ld")
978
966
(set_attr "length" "4,2,* ")]
979
967
)
980
968
981
- (define_insn "* arc64_zero_extend_hi_to_di"
982
- [ (set (match_operand: DI 0 "register_operand" "=r,q,r")
983
- (zero_extend: DI
984
- (match_operand: HI 1 "nonimmediate_operand" "r,Uldms,m")))
985
- ]
986
- ""
987
- "@
988
- bmskl\\ t%0,%1,15
989
- ldh_s\\ t%0,%1
990
- ldh%U1\\ t%0,%1"
991
- [ (set_attr "type" "and,ld,ld")
992
- (set_attr "length" "4,2,* ")]
993
- )
969
+ ;; conditional execution for the above two patterns
970
+ (define_insn "* zero_extend< SHORT:mode > < GPI:mode > 2_ce"
971
+ [ (cond_exec
972
+ (match_operator 2 "ordered_comparison_operator"
973
+ [ (match_operand 3 "cc_register" "") (const_int 0)] )
974
+ (set (match_operand: GPI 0"register_operand" "=r")
975
+ (zero_extend: GPI (match_operand: SHORT 1 "register_operand" "0"))))]
976
+ ""
977
+ "bmsk< GPI:mcctab > .%m2\\ t%0,%1,< SHORT:sizen > "
978
+ [ (set_attr "type" "and")
979
+ (set_attr "length" "4")] )
994
980
995
- (define_insn "* arc64_sign_extend _ <mode >_ to_di "
981
+ (define_insn "* sign_extend <mode >di2 "
996
982
[ (set (match_operand: DI 0 "register_operand" "=r,r")
997
983
(sign_extend: DI
998
- (match_operand: EXT 1 "nonimmediate_operand" "r,m")))
999
- ]
984
+ (match_operand: EXT 1 "nonimmediate_operand" "r,m")))]
1000
985
""
1001
986
"@
1002
987
sex<exttab >l\\ t%0,%1
1003
988
ld<sfxtab >.x%U1\\ t%0,%1"
1004
- [ (set_attr "type" "sex,ld")
1005
- (set_attr "length" "4,* ")]
1006
- )
989
+ [ (set_attr "type" "sex,ld")
990
+ (set_attr "length" "4,* ")] )
1007
991
1008
992
(define_insn "* sign_extend<mode >si2"
1009
993
[ (set (match_operand: SI 0 "register_operand" "=q,r,r")
0 commit comments