ount. On i386, shifts do truncate the count. But bit test instructions take the modulo of the bit offset operand. */ /* #define SHIFT_COUNT_TRUNCATED */ /* A macro to update M and UNSIGNEDP when an object whose type is TYPE and which has the specified mode and signedness is to be stored in a register. This macro is only called when TYPE is a scalar type. On i386 it is sometimes useful to promote HImode and QImode quantities to SImode. The choice depends on target type. */ #define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \ do { \ if (((MODE) == HImode && TARGET_PROMOTE_HI_REGS) \ || ((MODE) == QImode && TARGET_PROMOTE_QI_REGS)) \ (MODE) = SImode; \ } while (0) /* Specify the machine mode that pointers have. After generation of rtl, the compiler makes no further distinction between pointers and any other objects of this machine mode. */ #define Pmode (ix86_pmode == PMODE_DI ? DImode : SImode) /* Supply a definition of STACK_SAVEAREA_MODE for emit_stack_save. NONLOCAL needs space to save both shadow stack and stack pointers. FIXME: We only need to save and restore stack pointer in ptr_mode. But expand_builtin_setjmp_setup and expand_builtin_longjmp use Pmode to save and restore stack pointer. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84150 */ #define STACK_SAVEAREA_MODE(LEVEL) \ ((LEVEL) == SAVE_NONLOCAL ? (TARGET_64BIT ? TImode : DImode) : Pmode) /* Specify the machine_mode of the size increment operand of an 'allocate_stack' named pattern. */ #define STACK_SIZE_MODE Pmode /* A C expression whose value is zero if pointers that need to be extended from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and greater then zero if they are zero-extended and less then zero if the ptr_extend instruction should be used. */ #define POINTERS_EXTEND_UNSIGNED 1 /* A function address in a call instruction is a byte address (for indexing purposes) so give the MEM rtx a byte's mode. */ #define FUNCTION_MODE QImode