From 9bb0cb7c70f70b531fb032dd14c052a3e696193d Mon Sep 17 00:00:00 2001 From: sof Date: Thu, 5 Jun 1997 20:52:17 +0000 Subject: [PATCH] [project @ 1997-06-05 20:52:17 by sof] Support/hack for handling double alignment of double array access correctly --- ghc/compiler/nativeGen/PprMach.lhs | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/ghc/compiler/nativeGen/PprMach.lhs b/ghc/compiler/nativeGen/PprMach.lhs index 80c0c02..a016d3e 100644 --- a/ghc/compiler/nativeGen/PprMach.lhs +++ b/ghc/compiler/nativeGen/PprMach.lhs @@ -1121,6 +1121,16 @@ pprCondInstr name cond arg -- a clumsy hack for now, to handle possible double alignment problems +-- even clumsier, to allow for RegReg regs that show when doing indexed +-- reads (bytearrays). +-- +pprInstr (LD DF (AddrRegReg g1 g2) reg) + = hcat [ + ptext SLIT("\tadd\t"), pprReg g1,comma,pprReg g2,comma,pprReg g1, char '\n', + pp_ld_lbracket, pprReg g1, pp_rbracket_comma, pprReg reg, char '\n', + pp_ld_lbracket, pprReg g1, ptext SLIT("+4]"), comma, pprReg (fPair reg) + ] + pprInstr (LD DF addr reg) | maybeToBool off_addr = hcat [ pp_ld_lbracket, @@ -1151,18 +1161,24 @@ pprInstr (LD size addr reg) -- The same clumsy hack as above -pprInstr (ST DF reg addr) | maybeToBool off_addr - = hcat [ +pprInstr (ST DF reg (AddrRegReg g1 g2)) + = hcat [ + ptext SLIT("\tadd\t"), + pprReg g1,comma,pprReg g2,comma,pprReg g1, char '\n', + ptext SLIT("\tst\t"), + pprReg reg, pp_comma_lbracket, pprReg g1, + ptext SLIT("]\n\tst\t"), + pprReg (fPair reg), pp_comma_lbracket, pprReg g1, ptext SLIT("+4]") + ] + +pprInstr (ST DF reg addr) | maybeToBool off_addr + = hcat [ ptext SLIT("\tst\t"), - pprReg reg, - pp_comma_lbracket, - pprAddr addr, + pprReg reg, pp_comma_lbracket, pprAddr addr, ptext SLIT("]\n\tst\t"), - pprReg (fPair reg), - pp_comma_lbracket, - pprAddr addr2, - rbrack + pprReg (fPair reg), pp_comma_lbracket, + pprAddr addr2, rbrack ] where off_addr = addrOffset addr 4 -- 1.7.10.4