(TARGET_SHORT_BY_BYTES): New macro.

(TARGET_SWITCHES): Recognize switches -m[no-]short-load-bytes.
(TARGET_DEFAULT): Only define if not already done so.
(PROMOTE_MODE): Promote HImode unsigned if TARGET_SHORT_BY_BYTES.
(SECONDARY_INPUT_RELOAD_CLASS): Need a scratch for reloading HImode if
TARGET_SHORT_BY_BYTES.

From-SVN: r8200
This commit is contained in:
Richard Earnshaw 1994-10-02 15:10:27 +00:00
parent 0b9d35ddc1
commit 2ce9c1b9e1

View File

@ -86,6 +86,12 @@ extern int target_flags;
of condition flags when returning from a branch & link (ie. a function) */
#define TARGET_6 (target_flags & 8)
/* Leave some bits for new processor variants */
/* Nonzero if shorts must be loaded byte at a time. This is not necessary
for the arm processor chip, but it is needed for some MMU chips. */
#define TARGET_SHORT_BY_BYTES (target_flags & 0x200)
/* ARM_EXTRA_TARGET_SWITCHES is used in riscix.h to define some options which
are passed to the preprocessor and the assembler post-processor. They
aren't needed in the main pass of the compiler, but if we don't define
@ -104,6 +110,10 @@ extern int target_flags;
{"6", 8}, \
{"2", -8}, \
{"3", -8}, \
{"short-load-bytes", (0x200)}, \
{"no-short-load-bytes", -(0x200)}, \
{"short-load-words", -(0x200)}, \
{"no-short-load-words", (0x200)}, \
ARM_EXTRA_TARGET_SWITCHES \
{"", TARGET_DEFAULT } \
}
@ -138,7 +148,9 @@ enum floating_point_type
extern enum floating_point_type arm_fpu;
#ifndef TARGET_DEFAULT
#define TARGET_DEFAULT 0
#endif
#define TARGET_MEM_FUNCTIONS 1
@ -178,7 +190,7 @@ extern enum floating_point_type arm_fpu;
if (MODE == QImode) \
UNSIGNEDP = 1; \
else if (MODE == HImode) \
UNSIGNEDP = 0; \
UNSIGNEDP = TARGET_SHORT_BY_BYTES != 0; \
(MODE) = SImode; \
}
@ -547,6 +559,11 @@ enum reg_class
&& true_regnum (X) == -1) ? GENERAL_REGS \
: ((MODE) == HImode && true_regnum (X) == -1) ? GENERAL_REGS : NO_REGS)
/* If we need to load shorts byte-at-a-time, then we need a scratch. */
#define SECONDARY_INPUT_RELOAD_CLASS(CLASS,MODE,X) \
(((MODE) == HImode && TARGET_SHORT_BY_BYTES && true_regnum (X) == -1) \
? GENERAL_REGS : NO_REGS)
/* Return the maximum number of consecutive registers
needed to represent mode MODE in a register of class CLASS.
ARM regs are UNITS_PER_WORD bits while FPU regs can hold any FP mode */