Commit 28633bbd by Claudiu Zissulescu Committed by Claudiu Zissulescu

[ARC] Add TLS support.

gcc/
2016-04-28  Claudiu Zissulescu  <claziss@synopsys.com>
	    Joern Rennecke  <joern.rennecke@embecosm.com>

	* config/arc/arc-protos.h (arc_legitimize_pic_address): Remove
	declaration.
	(emit_pic_move): Remove.
	(arc_eh_uses, insn_is_tls_gd_dispatch): Declare.
	* config/arc/arc.c (emit_pic_move): Removed.
	(TARGET_HAVE_TLS): Define.
	(arc_conditional_register_usage): Test for arc_tp_regno.
	(arc_print_operand, arc_print_operand_address): Handle TLS
	unspecs.
	(arc_needs_pcl_p): New function.
	(arc_legitimate_pc_offset_p): Use arc_needs_pcl_p.
	(arc_legitimate_pic_addr_p): Handle TLS unspecs.
	(arc_raw_symbolic_reference_mentioned_p): Likewise.
	(arc_get_tp, arc_emit_call_tls_get_addr): New function.
	(arc_legitimize_tls_address): Likewise.
	(DTPOFF_ZERO_SYM): Define.
	(arc_legitimize_pic_address): Make it static, handle TLS cases.
	(arc_output_pic_addr_const): Print TLS unspecs.
	(prepare_pic_move): New function, replaces emit_pic_move.
	(arc_legitimate_constant_p): Handle TLS unspecs.
	(arc_legitimate_address_p): Likewise.
	(arc_rewrite_small_data_p): Use assert for TLS constants.
	(prepare_move_operands): Use prepare_pic_move.
	(arc_legitimize_address): Legitimize tls addresses.
	(arc_epilogue_uses): Check for arc_tp_regno.
	(arc_eh_uses, insn_is_tls_gd_dispatch): New function.
	* config/arc/arc.h [DEFAULT_LIBC != LIBC_UCLIBC] (EXTRA_SPECS):
	Define.
	[DEFAULT_LIBC != LIBC_UCLIBC] (ARC_TLS_EXTRA_START_SPEC):
	Likewise.
	[DEFAULT_LIBC != LIBC_UCLIBC] (STARTFILE_SPEC): Add
	%(arc_tls_extra_start_spec).
	(TARGET_CPU_CPP_BUILTINS): Define __ARC_TLS_REGNO__.
	(REGNO_OK_FOR_BASE_P): Check for arc_tp_regno.
	(EH_USES): Define.
	(INSN_REFERENCES_ARE_DELAYED): Use insn_is_tls_gd_dispatch.
	* config/arc/arc.md (UNSPEC_TLS_GD, UNSPEC_TLS_LD, UNSPEC_TLS_IE)
	(UNSPEC_TLS_OFF): Add.
	(R10_REG): Define.
	(tls_load_tp_soft, tls_gd_load, tls_gd_get_addr, tls_gd_dispatch)
	(get_thread_pointersi): New patterns.
	* config/arc/arc.opt (mtp-regno): New option.
	* config/arc/predicates.md (move_src_operand): Handle TLS symbols.
	(move_dest_operand): Likewise.
	* configure: Regenerate.
	* configure.ac: Add arc*-*-* case to test for tls.
	* doc/invoke.texi (ARC options): Document mtp-regno.

Co-Authored-By: Joern Rennecke <joern.rennecke@embecosm.com>

From-SVN: r235559
parent 8b48923b
2016-04-28 Claudiu Zissulescu <claziss@synopsys.com> 2016-04-28 Claudiu Zissulescu <claziss@synopsys.com>
Joern Rennecke <joern.rennecke@embecosm.com>
* config/arc/arc-protos.h (arc_legitimize_pic_address): Remove
declaration.
(emit_pic_move): Remove.
(arc_eh_uses, insn_is_tls_gd_dispatch): Declare.
* config/arc/arc.c (emit_pic_move): Removed.
(TARGET_HAVE_TLS): Define.
(arc_conditional_register_usage): Test for arc_tp_regno.
(arc_print_operand, arc_print_operand_address): Handle TLS
unspecs.
(arc_needs_pcl_p): New function.
(arc_legitimate_pc_offset_p): Use arc_needs_pcl_p.
(arc_legitimate_pic_addr_p): Handle TLS unspecs.
(arc_raw_symbolic_reference_mentioned_p): Likewise.
(arc_get_tp, arc_emit_call_tls_get_addr): New function.
(arc_legitimize_tls_address): Likewise.
(DTPOFF_ZERO_SYM): Define.
(arc_legitimize_pic_address): Make it static, handle TLS cases.
(arc_output_pic_addr_const): Print TLS unspecs.
(prepare_pic_move): New function, replaces emit_pic_move.
(arc_legitimate_constant_p): Handle TLS unspecs.
(arc_legitimate_address_p): Likewise.
(arc_rewrite_small_data_p): Use assert for TLS constants.
(prepare_move_operands): Use prepare_pic_move.
(arc_legitimize_address): Legitimize tls addresses.
(arc_epilogue_uses): Check for arc_tp_regno.
(arc_eh_uses, insn_is_tls_gd_dispatch): New function.
* config/arc/arc.h [DEFAULT_LIBC != LIBC_UCLIBC] (EXTRA_SPECS):
Define.
[DEFAULT_LIBC != LIBC_UCLIBC] (ARC_TLS_EXTRA_START_SPEC):
Likewise.
[DEFAULT_LIBC != LIBC_UCLIBC] (STARTFILE_SPEC): Add
%(arc_tls_extra_start_spec).
(TARGET_CPU_CPP_BUILTINS): Define __ARC_TLS_REGNO__.
(REGNO_OK_FOR_BASE_P): Check for arc_tp_regno.
(EH_USES): Define.
(INSN_REFERENCES_ARE_DELAYED): Use insn_is_tls_gd_dispatch.
* config/arc/arc.md (UNSPEC_TLS_GD, UNSPEC_TLS_LD, UNSPEC_TLS_IE)
(UNSPEC_TLS_OFF): Add.
(R10_REG): Define.
(tls_load_tp_soft, tls_gd_load, tls_gd_get_addr, tls_gd_dispatch)
(get_thread_pointersi): New patterns.
* config/arc/arc.opt (mtp-regno): New option.
* config/arc/predicates.md (move_src_operand): Handle TLS symbols.
(move_dest_operand): Likewise.
* configure: Regenerate.
* configure.ac: Add arc*-*-* case to test for tls.
* doc/invoke.texi (ARC options): Document mtp-regno.
2016-04-28 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.c (arc_vector_mode_supported_p): Add support for * config/arc/arc.c (arc_vector_mode_supported_p): Add support for
the new ARC HS SIMD instructions. the new ARC HS SIMD instructions.
......
...@@ -57,7 +57,6 @@ extern unsigned int arc_compute_frame_size (int); ...@@ -57,7 +57,6 @@ extern unsigned int arc_compute_frame_size (int);
extern bool arc_ccfsm_branch_deleted_p (void); extern bool arc_ccfsm_branch_deleted_p (void);
extern void arc_ccfsm_record_branch_deleted (void); extern void arc_ccfsm_record_branch_deleted (void);
extern rtx arc_legitimize_pic_address (rtx, rtx);
void arc_asm_output_aligned_decl_local (FILE *, tree, const char *, void arc_asm_output_aligned_decl_local (FILE *, tree, const char *,
unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT,
unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT,
...@@ -68,7 +67,6 @@ extern bool check_if_valid_sleep_operand (rtx *, int); ...@@ -68,7 +67,6 @@ extern bool check_if_valid_sleep_operand (rtx *, int);
extern bool arc_legitimate_constant_p (machine_mode, rtx); extern bool arc_legitimate_constant_p (machine_mode, rtx);
extern bool arc_legitimate_pc_offset_p (rtx); extern bool arc_legitimate_pc_offset_p (rtx);
extern bool arc_legitimate_pic_addr_p (rtx); extern bool arc_legitimate_pic_addr_p (rtx);
extern void emit_pic_move (rtx *, machine_mode);
extern bool arc_raw_symbolic_reference_mentioned_p (rtx, bool); extern bool arc_raw_symbolic_reference_mentioned_p (rtx, bool);
extern bool arc_legitimate_pic_operand_p (rtx); extern bool arc_legitimate_pic_operand_p (rtx);
extern bool arc_is_longcall_p (rtx); extern bool arc_is_longcall_p (rtx);
...@@ -118,8 +116,10 @@ extern bool arc_text_label (rtx_insn *insn); ...@@ -118,8 +116,10 @@ extern bool arc_text_label (rtx_insn *insn);
extern int arc_decl_pretend_args (tree decl); extern int arc_decl_pretend_args (tree decl);
extern bool arc_short_comparison_p (rtx, int); extern bool arc_short_comparison_p (rtx, int);
extern bool arc_epilogue_uses (int regno); extern bool arc_epilogue_uses (int regno);
extern bool arc_eh_uses (int regno);
/* insn-attrtab.c doesn't include reload.h, which declares regno_clobbered_p. */ /* insn-attrtab.c doesn't include reload.h, which declares regno_clobbered_p. */
extern int regno_clobbered_p (unsigned int, rtx_insn *, machine_mode, int); extern int regno_clobbered_p (unsigned int, rtx_insn *, machine_mode, int);
extern int arc_return_slot_offset (void); extern int arc_return_slot_offset (void);
extern bool arc_legitimize_reload_address (rtx *, machine_mode, int, int); extern bool arc_legitimize_reload_address (rtx *, machine_mode, int, int);
extern void arc_secondary_reload_conv (rtx, rtx, rtx, bool); extern void arc_secondary_reload_conv (rtx, rtx, rtx, bool);
extern bool insn_is_tls_gd_dispatch (rtx_insn *);
...@@ -109,6 +109,8 @@ along with GCC; see the file COPYING3. If not see ...@@ -109,6 +109,8 @@ along with GCC; see the file COPYING3. If not see
builtin_define ("__ARC_SIMD__"); \ builtin_define ("__ARC_SIMD__"); \
if (TARGET_BARREL_SHIFTER) \ if (TARGET_BARREL_SHIFTER) \
builtin_define ("__Xbarrel_shifter");\ builtin_define ("__Xbarrel_shifter");\
builtin_define_with_int_value ("__ARC_TLS_REGNO__", \
arc_tp_regno); \
builtin_assert ("cpu=arc"); \ builtin_assert ("cpu=arc"); \
builtin_assert ("machine=arc"); \ builtin_assert ("machine=arc"); \
builtin_define (TARGET_BIG_ENDIAN \ builtin_define (TARGET_BIG_ENDIAN \
...@@ -201,7 +203,13 @@ along with GCC; see the file COPYING3. If not see ...@@ -201,7 +203,13 @@ along with GCC; see the file COPYING3. If not see
#endif #endif
#if DEFAULT_LIBC != LIBC_UCLIBC #if DEFAULT_LIBC != LIBC_UCLIBC
#define STARTFILE_SPEC "%{!shared:crt0.o%s} crti%O%s %{pg|p:crtg.o%s} crtbegin.o%s" #define ARC_TLS_EXTRA_START_SPEC "crttls.o%s"
#define EXTRA_SPECS \
{ "arc_tls_extra_start_spec", ARC_TLS_EXTRA_START_SPEC }, \
#define STARTFILE_SPEC "%{!shared:crt0.o%s} crti%O%s %{pg|p:crtg.o%s} " \
"%(arc_tls_extra_start_spec) crtbegin.o%s"
#else #else
#define STARTFILE_SPEC "%{!shared:%{!mkernel:crt1.o%s}} crti.o%s \ #define STARTFILE_SPEC "%{!shared:%{!mkernel:crt1.o%s}} crti.o%s \
%{!shared:%{pg|p|profile:crtg.o%s} crtbegin.o%s} %{shared:crtbeginS.o%s}" %{!shared:%{pg|p|profile:crtg.o%s} crtbegin.o%s} %{shared:crtbeginS.o%s}"
...@@ -748,9 +756,10 @@ extern enum reg_class arc_regno_reg_class[]; ...@@ -748,9 +756,10 @@ extern enum reg_class arc_regno_reg_class[];
or a pseudo reg currently allocated to a suitable hard reg. or a pseudo reg currently allocated to a suitable hard reg.
Since they use reg_renumber, they are safe only once reg_renumber Since they use reg_renumber, they are safe only once reg_renumber
has been allocated, which happens in local-alloc.c. */ has been allocated, which happens in local-alloc.c. */
#define REGNO_OK_FOR_BASE_P(REGNO) \ #define REGNO_OK_FOR_BASE_P(REGNO) \
((REGNO) < 29 || ((REGNO) == ARG_POINTER_REGNUM) || ((REGNO) == 63) ||\ ((REGNO) < 29 || ((REGNO) == ARG_POINTER_REGNUM) || ((REGNO) == 63) \
(unsigned) reg_renumber[REGNO] < 29) || ((unsigned) reg_renumber[REGNO] < 29) \
|| ((unsigned) (REGNO) == (unsigned) arc_tp_regno))
#define REGNO_OK_FOR_INDEX_P(REGNO) REGNO_OK_FOR_BASE_P(REGNO) #define REGNO_OK_FOR_INDEX_P(REGNO) REGNO_OK_FOR_BASE_P(REGNO)
...@@ -937,6 +946,8 @@ arc_return_addr_rtx(COUNT,FRAME) ...@@ -937,6 +946,8 @@ arc_return_addr_rtx(COUNT,FRAME)
#define EPILOGUE_USES(REGNO) arc_epilogue_uses ((REGNO)) #define EPILOGUE_USES(REGNO) arc_epilogue_uses ((REGNO))
#define EH_USES(REGNO) arc_eh_uses((REGNO))
/* Definitions for register eliminations. /* Definitions for register eliminations.
This is an array of structures. Each structure initializes one pair This is an array of structures. Each structure initializes one pair
...@@ -1657,7 +1668,8 @@ extern enum arc_function_type arc_compute_function_type (struct function *); ...@@ -1657,7 +1668,8 @@ extern enum arc_function_type arc_compute_function_type (struct function *);
&& GET_CODE (PATTERN (X)) != CLOBBER \ && GET_CODE (PATTERN (X)) != CLOBBER \
&& (get_attr_type (X) == TYPE_CALL || get_attr_type (X) == TYPE_SFUNC)) && (get_attr_type (X) == TYPE_CALL || get_attr_type (X) == TYPE_SFUNC))
#define INSN_REFERENCES_ARE_DELAYED(insn) INSN_SETS_ARE_DELAYED (insn) #define INSN_REFERENCES_ARE_DELAYED(insn) \
(INSN_SETS_ARE_DELAYED (insn) && !insn_is_tls_gd_dispatch (insn))
#define CALL_ATTR(X, NAME) \ #define CALL_ATTR(X, NAME) \
((CALL_P (X) || NONJUMP_INSN_P (X)) \ ((CALL_P (X) || NONJUMP_INSN_P (X)) \
......
...@@ -111,6 +111,10 @@ ...@@ -111,6 +111,10 @@
ARC_UNSPEC_PLT ARC_UNSPEC_PLT
ARC_UNSPEC_GOT ARC_UNSPEC_GOT
ARC_UNSPEC_GOTOFF ARC_UNSPEC_GOTOFF
UNSPEC_TLS_GD
UNSPEC_TLS_LD
UNSPEC_TLS_IE
UNSPEC_TLS_OFF
UNSPEC_ARC_NORM UNSPEC_ARC_NORM
UNSPEC_ARC_NORMW UNSPEC_ARC_NORMW
UNSPEC_ARC_SWAP UNSPEC_ARC_SWAP
...@@ -169,6 +173,7 @@ ...@@ -169,6 +173,7 @@
(R1_REG 1) (R1_REG 1)
(R2_REG 2) (R2_REG 2)
(R3_REG 3) (R3_REG 3)
(R10_REG 10)
(R12_REG 12) (R12_REG 12)
(SP_REG 28) (SP_REG 28)
(ILINK1_REGNUM 29) (ILINK1_REGNUM 29)
...@@ -5277,6 +5282,72 @@ ...@@ -5277,6 +5282,72 @@
[(set_attr "type" "call") [(set_attr "type" "call")
(set_attr "is_SIBCALL" "yes")]) (set_attr "is_SIBCALL" "yes")])
(define_insn "tls_load_tp_soft"
[(set (reg:SI R0_REG) (unspec:SI [(const_int 0)] UNSPEC_TLS_OFF))
(clobber (reg:SI RETURN_ADDR_REGNUM))]
""
"*return arc_output_libcall (\"__read_tp\");"
[(set_attr "is_sfunc" "yes")
(set_attr "predicable" "yes")])
(define_insn "tls_gd_load"
[(set (match_operand:SI 0 "dest_reg_operand" "=Rcq#q,c")
(unspec:SI [(match_operand:SI 1 "register_operand" "Rcq#q,c")
(match_operand:SI 2 "symbolic_operand" "X,X")]
UNSPEC_TLS_GD))]
""
".tls_gd_ld %2`ld%? %0,[%1]"
[(set_attr "type" "load")
; if the linker has to patch this into IE, we need a long insn
; (FIXME: or two short insn, ld_s / jl_s. missing -Os optimization.)
(set_attr_alternative "iscompact"
[(cond [(ne (symbol_ref "arc_tp_regno == 30") (const_int 0))
(const_string "*")] (const_string "maybe"))
(const_string "*")])])
(define_insn "tls_gd_get_addr"
[(set (reg:SI R0_REG)
(call:SI (mem:SI (unspec:SI [(match_operand:SI 0
"symbolic_operand" "X,X")]
UNSPEC_TLS_GD))
(const_int 0)))
(clobber (reg:SI RETURN_ADDR_REGNUM))]
""
".tls_gd_ld %0`bl%* __tls_get_addr@plt"
[(set_attr "type" "call")
; With TARGET_MEDIUM_CALLS, plt calls are not predicable.
(set_attr "predicable" "no")])
; We make this call specific to the tls symbol to avoid commoning this
; with calls for other symbols; we want the linker to be able to
(define_insn "tls_gd_dispatch"
[(set (reg:SI R0_REG)
(unspec:SI
[(reg:SI R0_REG)
(call (mem:SI (match_operand:SI 0 "register_operand" "Rcq,q,c"))
(const_int 0))
(match_operand:SI 1 "symbolic_operand" "X,X,X")]
UNSPEC_TLS_GD))
(clobber (reg:SI RETURN_ADDR_REGNUM))
(clobber (reg:DI R10_REG))
(clobber (reg:SI R12_REG))]
""
".tls_gd_call %1`jl%!%* [%0]"
[(set_attr "type" "call")
(set_attr "iscompact" "maybe,false,*")
(set_attr "predicable" "no,no,yes")])
;; For thread pointer builtins
(define_expand "get_thread_pointersi"
[(set (match_operand:SI 0 "register_operand") (match_dup 1))]
""
"operands[1] = gen_rtx_REG (Pmode, arc_tp_regno);")
(define_expand "set_thread_pointersi"
[(set (match_dup 1) (match_operand:SI 0 "register_operand"))]
""
"operands[1] = gen_rtx_REG (Pmode, arc_tp_regno);")
;; If hardware floating point is available, don't define a negdf pattern; ;; If hardware floating point is available, don't define a negdf pattern;
;; it would be something like: ;; it would be something like:
;;(define_insn "negdf2" ;;(define_insn "negdf2"
......
...@@ -456,3 +456,10 @@ Enum(arc_fpu) String(fpus_all) Value(FPU_SP | FPU_SC | FPU_SF | FPU_SD) ...@@ -456,3 +456,10 @@ Enum(arc_fpu) String(fpus_all) Value(FPU_SP | FPU_SC | FPU_SF | FPU_SD)
EnumValue EnumValue
Enum(arc_fpu) String(fpud_all) Value(FPU_SP | FPU_SC | FPU_SF | FPU_SD | FPU_DP | FPU_DC | FPU_DF | FPU_DD) Enum(arc_fpu) String(fpud_all) Value(FPU_SP | FPU_SC | FPU_SF | FPU_SD | FPU_DP | FPU_DC | FPU_DF | FPU_DD)
mtp-regno=
Target RejectNegative Joined UInteger Var(arc_tp_regno) Init(25)
Specify thread pointer register number
mtp-regno=none
Target RejectNegative Var(arc_tp_regno,-1)
...@@ -351,9 +351,12 @@ ...@@ -351,9 +351,12 @@
switch (GET_CODE (op)) switch (GET_CODE (op))
{ {
case SYMBOL_REF : case SYMBOL_REF :
if (SYMBOL_REF_TLS_MODEL (op))
return 0;
case LABEL_REF : case LABEL_REF :
return 1;
case CONST : case CONST :
return (!flag_pic || arc_legitimate_pic_operand_p(op)); return arc_legitimate_constant_p (mode, op);
case CONST_INT : case CONST_INT :
return (LARGE_INT (INTVAL (op))); return (LARGE_INT (INTVAL (op)));
case CONST_DOUBLE : case CONST_DOUBLE :
...@@ -451,6 +454,16 @@ ...@@ -451,6 +454,16 @@
&& (GET_CODE (XEXP (addr, 1)) != PLUS && (GET_CODE (XEXP (addr, 1)) != PLUS
|| !CONST_INT_P (XEXP (XEXP (addr, 1), 1)))) || !CONST_INT_P (XEXP (XEXP (addr, 1), 1))))
return 0; return 0;
/* CONST_INT / CONST_DOUBLE is fine, but the PIC CONST ([..] UNSPEC))
constructs are effectively indexed. */
if (flag_pic)
{
rtx ad0 = addr;
while (GET_CODE (ad0) == PLUS)
ad0 = XEXP (ad0, 0);
if (GET_CODE (ad0) == CONST || GET_CODE (ad0) == UNSPEC)
return 0;
}
return address_operand (addr, mode); return address_operand (addr, mode);
} }
default : default :
......
...@@ -23855,6 +23855,12 @@ foo: .long 25 ...@@ -23855,6 +23855,12 @@ foo: .long 25
tls_first_minor=13 tls_first_minor=13
tls_as_opt=--fatal-warnings tls_as_opt=--fatal-warnings
;; ;;
arc*-*-*)
conftest_s='
add_s r0,r0, @foo@tpoff'
tls_first_major=2
tls_first_minor=23
;;
cris-*-*|crisv32-*-*) cris-*-*|crisv32-*-*)
conftest_s=' conftest_s='
.section ".tdata","awT",@progbits .section ".tdata","awT",@progbits
......
...@@ -3086,6 +3086,12 @@ foo: .long 25 ...@@ -3086,6 +3086,12 @@ foo: .long 25
tls_first_minor=13 tls_first_minor=13
tls_as_opt=--fatal-warnings tls_as_opt=--fatal-warnings
;; ;;
arc*-*-*)
conftest_s='
add_s r0,r0, @foo@tpoff'
tls_first_major=2
tls_first_minor=23
;;
cris-*-*|crisv32-*-*) cris-*-*|crisv32-*-*)
conftest_s=' conftest_s='
.section ".tdata","awT",@progbits .section ".tdata","awT",@progbits
......
...@@ -593,7 +593,7 @@ Objective-C and Objective-C++ Dialects}. ...@@ -593,7 +593,7 @@ Objective-C and Objective-C++ Dialects}.
-mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape @gol -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape @gol
-mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof @gol -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof @gol
-mlong-calls -mmedium-calls -msdata @gol -mlong-calls -mmedium-calls -msdata @gol
-mucb-mcount -mvolatile-cache @gol -mucb-mcount -mvolatile-cache -mtp-regno=@var{regno} @gol
-malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc @gol -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc @gol
-mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi @gol -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi @gol
-mexpand-adddi -mindexed-loads -mlra -mlra-priority-none @gol -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none @gol
...@@ -13360,6 +13360,10 @@ Enable code density instructions for ARC EM, default on for ARC HS. ...@@ -13360,6 +13360,10 @@ Enable code density instructions for ARC EM, default on for ARC HS.
@opindex mll64 @opindex mll64
Enable double load/store operations for ARC HS cores. Enable double load/store operations for ARC HS cores.
@item -mtp-regno=@var{regno}
@opindex mtp-regno
Specify thread pointer register number.
@item -mmpy-option=@var{multo} @item -mmpy-option=@var{multo}
@opindex mmpy-option @opindex mmpy-option
Compile ARCv2 code with a multiplier design option. @samp{wlh1} is Compile ARCv2 code with a multiplier design option. @samp{wlh1} is
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment