Browse Source

+ added ref2string debug helper function to the WebAssembly code generator

Nikolay Nikolov 6 months ago
parent
commit
bd1a6a60e8
1 changed files with 48 additions and 0 deletions
  1. 48 0
      compiler/wasm32/hlcgcpu.pas

+ 48 - 0
compiler/wasm32/hlcgcpu.pas

@@ -245,6 +245,10 @@ uses
       procedure resizestackfpuval(list: TAsmList; fromsize, tosize: tcgsize);
       procedure resizestackfpuval(list: TAsmList; fromsize, tosize: tcgsize);
     end;
     end;
 
 
+{$ifdef extdebug}
+     function ref2string(const ref : treference) : string;
+{$endif extdebug}
+
 implementation
 implementation
 
 
   uses
   uses
@@ -296,6 +300,50 @@ implementation
       a_i64_rotr   {OP_ROR   rotate right             }
       a_i64_rotr   {OP_ROR   rotate right             }
     );
     );
 
 
+{$ifdef extdebug}
+     function ref2string(const ref : treference) : string;
+       const
+         tr: treference = (
+           offset: 0;
+           symbol: nil;
+           relsymbol: nil;
+           temppos: (val: 0);
+           base: NR_NO;
+           index: NR_NO;
+           refaddr: default(trefaddr);
+           scalefactor: 0;
+           volatility: [vol_read, vol_write];
+           alignment: 0;
+         );
+
+         function AsmSymbolName(sym: tasmsymbol): string;
+           begin
+             if assigned(sym) then
+               result := sym.name
+             else
+               result := 'nil';
+           end;
+
+         function Volatility2String(vs: tvolatilityset): string;
+           var
+             v: tvolatility;
+           begin
+             result := '[';
+             for v in tvolatility do
+               if v in vs then
+                 WriteStr(result, result, ',', v);
+             if length(result) > 1 then
+               delete(result, 2, 1);
+             result := result + ']';
+           end;
+
+       begin
+         WriteStr(result, '(offset: ', ref.offset, '; symbol: ', AsmSymbolName(ref.symbol), '; relsymbol: ', AsmSymbolName(ref.relsymbol), '; temppos: (val: ', ref.temppos.val,
+           '); base: ', std_regname(ref.base), '; index: ', std_regname(ref.index), '; refaddr: ', ref.refaddr, '; scalefactor: ', ref.scalefactor, '; volatility: ',
+           Volatility2String(ref.volatility), '; alignment: ', ref.alignment, ')');
+       end;
+{$endif extdebug}
+
   function thlcgwasm.is_methodptr_like_type(d:tdef): boolean;
   function thlcgwasm.is_methodptr_like_type(d:tdef): boolean;
     var
     var
       is_8byterecord, is_methodptr, is_nestedprocptr: Boolean;
       is_8byterecord, is_methodptr, is_nestedprocptr: Boolean;