-----Original Message----- From: oberon@moravcik.info [mailto:oberon@moravcik.info] Sent: Saturday, 5 July 2014 9:21 PM To: oberon@lists.inf.ethz.ch Subject: Re: [Oberon] Why macros were not implemented in oberon language?
From all of the ETH oberon documents I have read so far I cannot remember there was a mention of some procedure inlining in oberon compiler. Therefore I think there is neither manual nor automatic procedure inlining built in oberon compiler.
Some of the Oberon compilers for Intel have implemented procedure inlining as an Oberon extension. I have only seen the documentation describing its use with inline assembler routines. However, I just checked ETH PlugIn Oberon for WindowsTM / Win32 2.5 (7.2.2009) and it works well for simple normal procedures at least as well. I recall reading somewhere that the limit is a 256-byte procedure. The syntax for an inline procedure is a minus sign in front of the procedure name e.g. PROCEDURE -Double(VAR i: INTEGER); BEGIN i := i * 2 END Double; When this procedure is 'called' e.g. PROCEDURE Test*(VAR i: INTEGER); BEGIN Double(i); END Test; The resulting disassembly listing is: PROCEDURE Test 0019H: 55 PUSH EBP 001AH: 8B EC MOV EBP,ESP 001CH: 8B 5D 08 MOV EBX,8[EBP] 001FH: 66|8B 1B MOV BX,0[EBX] 0022H: 66|D1 E3 SHL/SAL BX,1 0025H: 8B 55 08 MOV EDX,8[EBP] 0028H: 66|89 1A MOV 0[EDX],BX 002BH: 8B E5 MOV ESP,EBP 002DH: 5D POP EBP 002EH: C2 04 00 RET 4 ---------------------------------------------------------------- If Double is changed to a normal procedure, the resulting disassembly listing is: PROCEDURE Test 0031H: 55 PUSH EBP 0032H: 8B EC MOV EBP,ESP 0034H: 8B 5D 08 MOV EBX,8[EBP] 0037H: 53 PUSH EBX 0038H: E8 DC FF FF FF CALL -36 (00000019H) 003DH: 8B E5 MOV ESP,EBP 003FH: 5D POP EBP 0040H: C2 04 00 RET 4 ---------------------------------------------------------------- Regards, Chris Chris Burrows CFB Software http://www.astrobe.com
participants (1)
-
Chris Burrows