Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
bd793c65
Commit
bd793c65
authored
Sep 18, 2000
by
Bernd Schmidt
Committed by
Bernd Schmidt
Sep 18, 2000
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MMX/SSE builtin support
From-SVN: r36487
parent
cf67d231
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
245 additions
and
8 deletions
+245
-8
gcc/ChangeLog
+17
-0
gcc/config/i386/i386-protos.h
+2
-0
gcc/config/i386/i386.c
+0
-0
gcc/config/i386/i386.h
+216
-0
gcc/config/i386/i386.md
+10
-8
No files found.
gcc/ChangeLog
View file @
bd793c65
...
@@ -2,6 +2,23 @@
...
@@ -2,6 +2,23 @@
* optabs.c (emit_libcall_block): Set CONST_CALL_P for the call.
* optabs.c (emit_libcall_block): Set CONST_CALL_P for the call.
* i386-protos.h (ix86_init_builtins, ix86_expand_builtin): Declare.
* i386.c (struct builtin_description): New.
(bdesc_comi, bdesc_2arg, bdesc_1arg): New arrays.
(mmx_reg_operand): Declare MODE arg as unused.
(ix86_expand_sse_comi, ix86_expand_sse_compare, safe_vector_operand,
ix86_expand_unop1_builtin, ix86_expand_unop_builtin,
ix86_expand_binop_builtin, ix86_expand_store_builtin,
ix86_init_builtins, ix86_expand_builtin): New functions.
* i386.h (ix86_builtins): New enumeration.
(MD_INIT_BUILTINS, MD_EXPAND_BUILTIN): New macros.
* i386.md (attr length_immediate): 0 for mmx/sse types.
(attr prefix_0f): 1 for mmx/sse types.
(setcc_2): Remove "*" so we get gen_setcc_2.
(emms): Account for changed register numbering. Set "memory" attr
to unknown.
(sfence): Set "memory" attr to unknown.
2000-09-18 Andreas Jaeger <aj@suse.de>
2000-09-18 Andreas Jaeger <aj@suse.de>
* configure.in: Define _GNU_SOURCE only when using the GNU C
* configure.in: Define _GNU_SOURCE only when using the GNU C
...
...
gcc/config/i386/i386-protos.h
View file @
bd793c65
...
@@ -131,6 +131,8 @@ extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx));
...
@@ -131,6 +131,8 @@ extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx));
extern
rtx
function_arg
PARAMS
((
CUMULATIVE_ARGS
*
,
enum
machine_mode
,
tree
,
int
));
extern
rtx
function_arg
PARAMS
((
CUMULATIVE_ARGS
*
,
enum
machine_mode
,
tree
,
int
));
extern
void
function_arg_advance
PARAMS
((
CUMULATIVE_ARGS
*
,
enum
machine_mode
,
extern
void
function_arg_advance
PARAMS
((
CUMULATIVE_ARGS
*
,
enum
machine_mode
,
tree
,
int
));
tree
,
int
));
extern
void
ix86_init_builtins
PARAMS
((
void
));
extern
rtx
ix86_expand_builtin
PARAMS
((
tree
,
rtx
,
rtx
,
enum
machine_mode
,
int
));
#endif
#endif
#endif
#endif
...
...
gcc/config/i386/i386.c
View file @
bd793c65
This diff is collapsed.
Click to expand it.
gcc/config/i386/i386.h
View file @
bd793c65
...
@@ -1721,6 +1721,222 @@ pop{l} %0" \
...
@@ -1721,6 +1721,222 @@ pop{l} %0" \
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == POST_DEC) goto LABEL
if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == POST_DEC) goto LABEL
/* Codes for all the SSE/MMX builtins. */
enum
ix86_builtins
{
IX86_BUILTIN_ADDPS
,
IX86_BUILTIN_ADDSS
,
IX86_BUILTIN_DIVPS
,
IX86_BUILTIN_DIVSS
,
IX86_BUILTIN_MULPS
,
IX86_BUILTIN_MULSS
,
IX86_BUILTIN_SUBPS
,
IX86_BUILTIN_SUBSS
,
IX86_BUILTIN_CMPEQPS
,
IX86_BUILTIN_CMPLTPS
,
IX86_BUILTIN_CMPLEPS
,
IX86_BUILTIN_CMPGTPS
,
IX86_BUILTIN_CMPGEPS
,
IX86_BUILTIN_CMPNEQPS
,
IX86_BUILTIN_CMPNLTPS
,
IX86_BUILTIN_CMPNLEPS
,
IX86_BUILTIN_CMPNGTPS
,
IX86_BUILTIN_CMPNGEPS
,
IX86_BUILTIN_CMPORDPS
,
IX86_BUILTIN_CMPUNORDPS
,
IX86_BUILTIN_CMPNEPS
,
IX86_BUILTIN_CMPEQSS
,
IX86_BUILTIN_CMPLTSS
,
IX86_BUILTIN_CMPLESS
,
IX86_BUILTIN_CMPGTSS
,
IX86_BUILTIN_CMPGESS
,
IX86_BUILTIN_CMPNEQSS
,
IX86_BUILTIN_CMPNLTSS
,
IX86_BUILTIN_CMPNLESS
,
IX86_BUILTIN_CMPNGTSS
,
IX86_BUILTIN_CMPNGESS
,
IX86_BUILTIN_CMPORDSS
,
IX86_BUILTIN_CMPUNORDSS
,
IX86_BUILTIN_CMPNESS
,
IX86_BUILTIN_COMIEQSS
,
IX86_BUILTIN_COMILTSS
,
IX86_BUILTIN_COMILESS
,
IX86_BUILTIN_COMIGTSS
,
IX86_BUILTIN_COMIGESS
,
IX86_BUILTIN_COMINEQSS
,
IX86_BUILTIN_UCOMIEQSS
,
IX86_BUILTIN_UCOMILTSS
,
IX86_BUILTIN_UCOMILESS
,
IX86_BUILTIN_UCOMIGTSS
,
IX86_BUILTIN_UCOMIGESS
,
IX86_BUILTIN_UCOMINEQSS
,
IX86_BUILTIN_CVTPI2PS
,
IX86_BUILTIN_CVTPS2PI
,
IX86_BUILTIN_CVTSI2SS
,
IX86_BUILTIN_CVTSS2SI
,
IX86_BUILTIN_CVTTPS2PI
,
IX86_BUILTIN_CVTTSS2SI
,
IX86_BUILTIN_M_FROM_INT
,
IX86_BUILTIN_M_TO_INT
,
IX86_BUILTIN_MAXPS
,
IX86_BUILTIN_MAXSS
,
IX86_BUILTIN_MINPS
,
IX86_BUILTIN_MINSS
,
IX86_BUILTIN_LOADAPS
,
IX86_BUILTIN_LOADUPS
,
IX86_BUILTIN_STOREAPS
,
IX86_BUILTIN_STOREUPS
,
IX86_BUILTIN_LOADSS
,
IX86_BUILTIN_STORESS
,
IX86_BUILTIN_MOVSS
,
IX86_BUILTIN_MOVHLPS
,
IX86_BUILTIN_MOVLHPS
,
IX86_BUILTIN_LOADHPS
,
IX86_BUILTIN_LOADLPS
,
IX86_BUILTIN_STOREHPS
,
IX86_BUILTIN_STORELPS
,
IX86_BUILTIN_MASKMOVQ
,
IX86_BUILTIN_MOVMSKPS
,
IX86_BUILTIN_PMOVMSKB
,
IX86_BUILTIN_MOVNTPS
,
IX86_BUILTIN_MOVNTQ
,
IX86_BUILTIN_PACKSSWB
,
IX86_BUILTIN_PACKSSDW
,
IX86_BUILTIN_PACKUSWB
,
IX86_BUILTIN_PADDB
,
IX86_BUILTIN_PADDW
,
IX86_BUILTIN_PADDD
,
IX86_BUILTIN_PADDSB
,
IX86_BUILTIN_PADDSW
,
IX86_BUILTIN_PADDUSB
,
IX86_BUILTIN_PADDUSW
,
IX86_BUILTIN_PSUBB
,
IX86_BUILTIN_PSUBW
,
IX86_BUILTIN_PSUBD
,
IX86_BUILTIN_PSUBSB
,
IX86_BUILTIN_PSUBSW
,
IX86_BUILTIN_PSUBUSB
,
IX86_BUILTIN_PSUBUSW
,
IX86_BUILTIN_PAND
,
IX86_BUILTIN_PANDN
,
IX86_BUILTIN_POR
,
IX86_BUILTIN_PXOR
,
IX86_BUILTIN_PAVGB
,
IX86_BUILTIN_PAVGW
,
IX86_BUILTIN_PCMPEQB
,
IX86_BUILTIN_PCMPEQW
,
IX86_BUILTIN_PCMPEQD
,
IX86_BUILTIN_PCMPGTB
,
IX86_BUILTIN_PCMPGTW
,
IX86_BUILTIN_PCMPGTD
,
IX86_BUILTIN_PEXTRW
,
IX86_BUILTIN_PINSRW
,
IX86_BUILTIN_PMADDWD
,
IX86_BUILTIN_PMAXSW
,
IX86_BUILTIN_PMAXUB
,
IX86_BUILTIN_PMINSW
,
IX86_BUILTIN_PMINUB
,
IX86_BUILTIN_PMULHUW
,
IX86_BUILTIN_PMULHW
,
IX86_BUILTIN_PMULLW
,
IX86_BUILTIN_PSADBW
,
IX86_BUILTIN_PSHUFW
,
IX86_BUILTIN_PSLLW
,
IX86_BUILTIN_PSLLD
,
IX86_BUILTIN_PSLLQ
,
IX86_BUILTIN_PSRAW
,
IX86_BUILTIN_PSRAD
,
IX86_BUILTIN_PSRLW
,
IX86_BUILTIN_PSRLD
,
IX86_BUILTIN_PSRLQ
,
IX86_BUILTIN_PSLLWI
,
IX86_BUILTIN_PSLLDI
,
IX86_BUILTIN_PSLLQI
,
IX86_BUILTIN_PSRAWI
,
IX86_BUILTIN_PSRADI
,
IX86_BUILTIN_PSRLWI
,
IX86_BUILTIN_PSRLDI
,
IX86_BUILTIN_PSRLQI
,
IX86_BUILTIN_PUNPCKHBW
,
IX86_BUILTIN_PUNPCKHWD
,
IX86_BUILTIN_PUNPCKHDQ
,
IX86_BUILTIN_PUNPCKLBW
,
IX86_BUILTIN_PUNPCKLWD
,
IX86_BUILTIN_PUNPCKLDQ
,
IX86_BUILTIN_SHUFPS
,
IX86_BUILTIN_RCPPS
,
IX86_BUILTIN_RCPSS
,
IX86_BUILTIN_RSQRTPS
,
IX86_BUILTIN_RSQRTSS
,
IX86_BUILTIN_SQRTPS
,
IX86_BUILTIN_SQRTSS
,
IX86_BUILTIN_UNPCKHPS
,
IX86_BUILTIN_UNPCKLPS
,
IX86_BUILTIN_ANDPS
,
IX86_BUILTIN_ANDNPS
,
IX86_BUILTIN_ORPS
,
IX86_BUILTIN_XORPS
,
IX86_BUILTIN_EMMS
,
IX86_BUILTIN_LDMXCSR
,
IX86_BUILTIN_STMXCSR
,
IX86_BUILTIN_SFENCE
,
IX86_BUILTIN_PREFETCH
,
/* Composite builtins, expand to more than one insn. */
IX86_BUILTIN_SETPS1
,
IX86_BUILTIN_SETPS
,
IX86_BUILTIN_CLRPS
,
IX86_BUILTIN_SETRPS
,
IX86_BUILTIN_LOADPS1
,
IX86_BUILTIN_LOADRPS
,
IX86_BUILTIN_STOREPS1
,
IX86_BUILTIN_STORERPS
,
IX86_BUILTIN_MMX_ZERO
,
IX86_BUILTIN_MAX
};
/* Initialize the target-specific builtin functions. Only do something
if TARGET_MMX is nonzero; we take care in ix86_init_builtins not to
enable any SSE builtins if TARGET_SSE is zero. */
#define MD_INIT_BUILTINS \
do \
{ \
if (TARGET_MMX) \
ix86_init_builtins (); \
} \
while (0)
/* Expand a target-specific builtin function. */
#define MD_EXPAND_BUILTIN(EXP, TARGET, SUBTARGET, MODE, IGNORE) \
ix86_expand_builtin (EXP, TARGET, SUBTARGET, MODE, IGNORE)
/* Define this macro if references to a symbol must be treated
/* Define this macro if references to a symbol must be treated
differently depending on something about the variable or
differently depending on something about the variable or
function named by the symbol (such as what section it is in).
function named by the symbol (such as what section it is in).
...
...
gcc/config/i386/i386.md
View file @
bd793c65
...
@@ -117,7 +117,7 @@
...
@@ -117,7 +117,7 @@
;; The (bounding maximum) length of an instruction immediate.
;; The (bounding maximum) length of an instruction immediate.
(define_attr "length_immediate" ""
(define_attr "length_immediate" ""
(cond
[
(eq_attr "type" "incdec,setcc,icmov,ibr,str,cld,lea,other,multi,idiv")
(cond
[
(eq_attr "type" "incdec,setcc,icmov,ibr,str,cld,lea,other,multi,idiv
,sse,mmx
")
(const_int 0)
(const_int 0)
(eq_attr "i387" "1")
(eq_attr "i387" "1")
(const_int 0)
(const_int 0)
...
@@ -167,7 +167,7 @@
...
@@ -167,7 +167,7 @@
;; Set when 0f opcode prefix is used.
;; Set when 0f opcode prefix is used.
(define_attr "prefix_0f" ""
(define_attr "prefix_0f" ""
(if_then_else (eq_attr "type" "imovx,setcc,icmov")
(if_then_else (eq_attr "type" "imovx,setcc,icmov
,sse,mmx
")
(const_int 1)
(const_int 1)
(const_int 0)))
(const_int 0)))
...
@@ -8311,7 +8311,7 @@
...
@@ -8311,7 +8311,7 @@
[
(set_attr "type" "setcc")
[
(set_attr "type" "setcc")
(set_attr "mode" "QI")])
(set_attr "mode" "QI")])
(define_insn "
*
setcc_2"
(define_insn "setcc_2"
[
(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+qm"))
[
(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+qm"))
(match_operator:QI 1 "ix86_comparison_operator"
(match_operator:QI 1 "ix86_comparison_operator"
[
(reg 17) (const_int 0)
]
))]
[
(reg 17) (const_int 0)
]
))]
...
@@ -13068,17 +13068,18 @@
...
@@ -13068,17 +13068,18 @@
(clobber (reg:XF 13))
(clobber (reg:XF 13))
(clobber (reg:XF 14))
(clobber (reg:XF 14))
(clobber (reg:XF 15))
(clobber (reg:XF 15))
(clobber (reg:DI 27))
(clobber (reg:DI 28))
(clobber (reg:DI 29))
(clobber (reg:DI 29))
(clobber (reg:DI 30))
(clobber (reg:DI 30))
(clobber (reg:DI 31))
(clobber (reg:DI 31))
(clobber (reg:DI 32))
(clobber (reg:DI 32))
(clobber (reg:DI 33))
(clobber (reg:DI 33))
(clobber (reg:DI 34))]
(clobber (reg:DI 34))
(clobber (reg:DI 35))
(clobber (reg:DI 36))]
"TARGET_MMX"
"TARGET_MMX"
"emms"
"emms"
[
(set_attr "type" "mmx")
]
)
[
(set_attr "type" "mmx")
(set_attr "memory" "unknown")])
(define_insn "ldmxcsr"
(define_insn "ldmxcsr"
[
(unspec_volatile [(match_operand:SI 0 "memory_operand" "m")
]
37)]
[
(unspec_volatile [(match_operand:SI 0 "memory_operand" "m")
]
37)]
...
@@ -13108,7 +13109,8 @@
...
@@ -13108,7 +13109,8 @@
(unspec:BLK
[
(match_dup 0)
]
44))]
(unspec:BLK
[
(match_dup 0)
]
44))]
"TARGET_SSE"
"TARGET_SSE"
"sfence"
"sfence"
[
(set_attr "type" "sse")
]
)
[
(set_attr "type" "sse")
(set_attr "memory" "unknown")])
(define_insn "prefetch"
(define_insn "prefetch"
[
(unspec
[
(match_operand:SI 0 "address_operand" "p")
[
(unspec
[
(match_operand:SI 0 "address_operand" "p")
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment