From 8bca29225cba386c6ed05c39b251ace8cc24429f Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Thu, 27 Jun 1996 20:23:08 -0400 Subject: [PATCH] (split_di): New; from i386.c. From-SVN: r12340 --- gcc/config/ns32k/ns32k.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/gcc/config/ns32k/ns32k.c b/gcc/config/ns32k/ns32k.c index 045800bb3cb..0e07662fa31 100644 --- a/gcc/config/ns32k/ns32k.c +++ b/gcc/config/ns32k/ns32k.c @@ -1,5 +1,5 @@ /* Subroutines for assembler code output on the NS32000. - Copyright (C) 1988, 1994, 1995 Free Software Foundation, Inc. + Copyright (C) 1988, 1994, 1995, 1996 Free Software Foundation, Inc. This file is part of GNU CC. @@ -227,6 +227,39 @@ reg_or_mem_operand (op, mode) || GET_CODE (op) == MEM)); } +/* Split one or more DImode RTL references into pairs of SImode + references. The RTL can be REG, offsettable MEM, integer constant, or + CONST_DOUBLE. "operands" is a pointer to an array of DImode RTL to + split and "num" is its length. lo_half and hi_half are output arrays + that parallel "operands". */ + +void +split_di (operands, num, lo_half, hi_half) + rtx operands[]; + int num; + rtx lo_half[], hi_half[]; +{ + while (num--) + { + if (GET_CODE (operands[num]) == REG) + { + lo_half[num] = gen_rtx (REG, SImode, REGNO (operands[num])); + hi_half[num] = gen_rtx (REG, SImode, REGNO (operands[num]) + 1); + } + else if (CONSTANT_P (operands[num])) + { + split_double (operands[num], &lo_half[num], &hi_half[num]); + } + else if (offsettable_memref_p (operands[num])) + { + lo_half[num] = operands[num]; + hi_half[num] = adj_offsettable_operand (operands[num], 4); + } + else + abort(); + } +} + /* Return the best assembler insn template for moving operands[1] into operands[0] as a fullword. */ -- 2.30.2