Commit 656f37ee by Richard Sandiford Committed by Richard Sandiford

mips.c (mips_address_insns): Treat BLKmode specially.

	* config/mips/mips.c (mips_address_insns): Treat BLKmode specially.
	* config/mips/mips.md: Expand comment above unaligned loads and stores.

From-SVN: r78129
parent 4221057e
2004-02-19 Richard Sandiford <rsandifo@redhat.com>
* config/mips/mips.c (mips_address_insns): Treat BLKmode specially.
* config/mips/mips.md: Expand comment above unaligned loads and stores.
2004-02-19 Richard Henderson <rth@redhat.com> 2004-02-19 Richard Henderson <rth@redhat.com>
* Makefile.in (STRICT2_WARN): Add -Wno-variadic-macros. * Makefile.in (STRICT2_WARN): Add -Wno-variadic-macros.
......
...@@ -1234,8 +1234,13 @@ mips_address_insns (rtx x, enum machine_mode mode) ...@@ -1234,8 +1234,13 @@ mips_address_insns (rtx x, enum machine_mode mode)
struct mips_address_info addr; struct mips_address_info addr;
int factor; int factor;
/* Each word of a multi-word value will be accessed individually. */ if (mode == BLKmode)
factor = (GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD; /* BLKmode is used for single unaligned loads and stores. */
factor = 1;
else
/* Each word of a multi-word value will be accessed individually. */
factor = (GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
if (mips_classify_address (&addr, x, mode, false)) if (mips_classify_address (&addr, x, mode, false))
switch (addr.type) switch (addr.type)
{ {
......
...@@ -4059,6 +4059,10 @@ dsrl\t%3,%3,1\n\ ...@@ -4059,6 +4059,10 @@ dsrl\t%3,%3,1\n\
;; refers to just the first or the last byte (depending on endianness). ;; refers to just the first or the last byte (depending on endianness).
;; We therefore use two memory operands to each instruction, one to ;; We therefore use two memory operands to each instruction, one to
;; describe the rtl effect and one to use in the assembly output. ;; describe the rtl effect and one to use in the assembly output.
;;
;; Operands 0 and 1 are the rtl-level target and source respectively.
;; This allows us to use the standard length calculations for the "load"
;; and "store" type attributes.
(define_insn "mov_lwl" (define_insn "mov_lwl"
[(set (match_operand:SI 0 "register_operand" "=d") [(set (match_operand:SI 0 "register_operand" "=d")
......
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