From 75a1391aed30a941baa85a28ff2bae9562ac514a Mon Sep 17 00:00:00 2001 From: Oyvind Harboe Date: Thu, 8 Jan 2009 15:21:21 +0100 Subject: [PATCH] Added -mno-memreg to use CALL for registers. -mmemreg now uses global variable _memreg + offset --- toolchain/gcc/gcc/config/zpu/zpu.c | 51 +++++++++++++++++++++++++++++--------- toolchain/gcc/gcc/config/zpu/zpu.h | 4 +++ toolchain/gcc/libgloss/zpu/crt0.S | 2 ++ 3 files changed, 45 insertions(+), 12 deletions(-) diff --git a/toolchain/gcc/gcc/config/zpu/zpu.c b/toolchain/gcc/gcc/config/zpu/zpu.c index 389f5664..d7c81230 100755 --- a/toolchain/gcc/gcc/config/zpu/zpu.c +++ b/toolchain/gcc/gcc/config/zpu/zpu.c @@ -139,6 +139,23 @@ static int addSpRange(rtx operand, int *found) return -1; } +static void pushHardReg(rtx reg) +{ + rtx regAddr=GEN_INT(REGNO(reg)*4); + + if (TARGET_MEMREG) + { + zpu_asm("im _memreg+%0", ®Addr); + zpu_asm("load", NULL); + } else + { + zpu_asm("im %0", ®Addr); + zpu_asm("im _regpush", NULL); + zpu_asm("call", NULL); + } + +} + static void pushRegAddress(rtx operand) { /* painful handling of compatiblity with obscure case @@ -146,12 +163,9 @@ static void pushRegAddress(rtx operand) */ int num; rtx offset; - rtx regAddr; num=stackSlotNum(REGNO(operand)); - regAddr=GEN_INT(REGNO(hard_frame_pointer_rtx)*4); - zpu_asm("im %0", ®Addr); - zpu_asm("load", NULL); + pushHardReg(hard_frame_pointer_rtx); offset=GEN_INT(-(get_frame_size()+calcStackRegSize())+num*4); zpu_immediate(&offset); stackOffset+=4; @@ -165,10 +179,7 @@ static void pushreg(rtx operand) { if (REGNO(operand)