tb0193.pp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. { %skiptarget=win32,win64,android }
  2. { %OPT=-Cg- }
  3. { Old file: tbs0227.pp }
  4. { external var does strange things when declared in localsymtable OK 0.99.11 (PFV) }
  5. var
  6. stacksize : ptrint;external name '__stklen';
  7. function getstacksize:ptrint;assembler;
  8. asm
  9. {$ifdef CPUI386}
  10. movl stacksize,%eax
  11. end ['EAX'];
  12. {$define implemented}
  13. {$endif CPUI386}
  14. {$ifdef CPUX86_64}
  15. movq stacksize@GOTPCREL(%rip),%rax
  16. movq (%rax),%rax
  17. end ['EAX'];
  18. {$define implemented}
  19. {$endif CPUX86_64}
  20. {$ifdef CPU68K}
  21. move.l stacksize,d0
  22. end ['D0'];
  23. {$define implemented}
  24. {$endif CPU68K}
  25. {$ifdef cpupowerpc}
  26. {$if not defined(macos) and not defined(aix)}
  27. lis r3, stacksize@ha
  28. lwz r3, stacksize@l(r3)
  29. {$else macos}
  30. lwz r3, stacksize(r2)
  31. lwz r3, 0(r3)
  32. {$endif macos}
  33. end;
  34. {$define implemented}
  35. {$endif cpupowerpc}
  36. {$ifdef cpusparc}
  37. sethi %hi(stacksize),%i0
  38. or %i0,%lo(stacksize),%i0
  39. end;
  40. {$define implemented}
  41. {$endif cpusparc}
  42. {$ifdef cpuarm}
  43. ldr r0,.Lpstacksize
  44. ldr r0,[r0]
  45. b .Lend
  46. .Lpstacksize:
  47. .long stacksize
  48. .Lend:
  49. end;
  50. {$define implemented}
  51. {$endif cpuarm}
  52. {$ifdef cpumips}
  53. la $v0,stacksize
  54. lw $v0,($v0)
  55. end;
  56. {$define implemented}
  57. {$endif cpumips}
  58. {$ifdef cpuaarch64}
  59. adrp x0,stacksize@PAGE
  60. ldr x0,[x0,stacksize@PAGEOFF]
  61. end;
  62. {$define implemented}
  63. {$endif cpuaarch64}
  64. {$ifdef cpuriscv64}
  65. .L1:
  66. auipc a0,%pcrel_hi(stacksize)
  67. ld a0, %pcrel_lo(.L1)(a0)
  68. end;
  69. {$define implemented}
  70. {$endif cpuriscv64}
  71. {$ifdef cpuloongarch64}
  72. pcalau12i $a0, %got_pc_hi20(stacksize)
  73. ld.d $a0, $a0, %got_pc_lo12(stacksize)
  74. end;
  75. {$define implemented}
  76. {$endif cpuloongarch64}
  77. {$ifndef implemented}
  78. {$error This test does not supported this CPU}
  79. end;
  80. {$endif}
  81. begin
  82. writeln(getstacksize);
  83. end.