From 1d8c5edbccff060c94c1dbd9cbdcce96f8a98c91 Mon Sep 17 00:00:00 2001 From: nickysn Date: Sat, 24 Oct 2020 15:41:41 +0000 Subject: [PATCH] + write references with registers for debugging purposes (to support asm output with -sr) in the LLVM-MC asm writer git-svn-id: branches/wasm@47173 - --- compiler/wasm32/agllvmmc.pas | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/compiler/wasm32/agllvmmc.pas b/compiler/wasm32/agllvmmc.pas index d1ae3c9e0b..f2dbefd683 100644 --- a/compiler/wasm32/agllvmmc.pas +++ b/compiler/wasm32/agllvmmc.pas @@ -177,8 +177,6 @@ implementation function getreferencestring(var ref : treference) : ansistring; begin - if (ref.index<>NR_NO) then - internalerror(2010122809); if assigned(ref.symbol) then begin // global symbol or field -> full type and name @@ -186,6 +184,10 @@ implementation // This register is not part of this instruction, it will have // been placed on the stack by the previous one. result:=ref.symbol.name; + if ref.base<>NR_NO then + result:=result+'+'+std_regname(ref.base); + if ref.index<>NR_NO then + result:=result+'+'+std_regname(ref.index); if ref.offset>0 then result:=result+'+'+tostr(ref.offset) else if ref.offset<0 then @@ -194,9 +196,25 @@ implementation else begin // local symbol -> stack slot, stored in offset + result:=''; if ref.base<>NR_STACK_POINTER_REG then - internalerror(2010122810); - result:=tostr(ref.offset); + result:=std_regname(ref.base); + if ref.index<>NR_NO then + if result<>'' then + result:=result+'+'+std_regname(ref.index) + else + result:=std_regname(ref.index); + if ref.offset>0 then + begin + if result<>'' then + result:=result+'+'+tostr(ref.offset) + else + result:=tostr(ref.offset); + end + else if ref.offset<0 then + result:=result+tostr(ref.offset); + if result='' then + result:='0'; end; end;