123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- {
- $Id$
- This file is part of the Free Pascal run time library.
- Copyright (c) 2003 by Florian Klaempfl,
- member of the Free Pascal development team
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- { This unit provides the same Functionality as the TypInfo Unit }
- { of Delphi }
- { ---------------------------------------------------------------------
- This include contains cpu-specific Low-level calling of methods.
- ---------------------------------------------------------------------}
- Function CallIntegerFunc(s: Pointer; Address: Pointer; Index, IValue: LongInt): Int64; assembler;
- { input: }
- { a1: s }
- { a2: address }
- { a2: index }
- { a3: ivalue }
- { output: }
- { a1-a2: result }
- var
- oldlr: pointer;
- asm
- { save current return address }
- mflr r0
- stw r0,oldlr
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- lwz r0,oldlr
- mtlr r0
- end;
- Function CallIntegerProc(s : Pointer;Address : Pointer;Value : Integer; Index,IValue : Longint) : Integer;assembler;
- { input: }
- { a1: s }
- { a2: address }
- { a3: index }
- { a4: ivalue }
- { output: }
- { a1: result }
- var
- oldlr: pointer;
- asm
- { save current return address }
- mflr r0
- stw r0,oldlr
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- lwz r0,oldlr
- mtlr r0
- end;
- Function CallSingleFunc(s : Pointer;Address : Pointer; Index,IValue : Longint) : Single;assembler;
- { input: }
- { a1: s }
- { a2: address }
- { a3: index }
- { a4: ivalue }
- { output: }
- { f0: result }
- var
- oldlr: pointer;
- asm
- { save current return address }
- mflr r0
- stw r0,oldlr
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- lwz r0,oldlr
- mtlr r0
- end;
- Function CallDoubleFunc(s : Pointer;Address : Pointer; Index,IValue : Longint) : Double;assembler;
- { input: }
- { a1: s }
- { a2: address }
- { a3: index }
- { a4: ivalue }
- { output: }
- { f0: result }
- var
- oldlr: pointer;
- asm
- { save current return address }
- mflr r0
- stw r0,oldlr
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- lwz r0,oldlr
- mtlr r0
- end;
- Function CallExtendedFunc(s : Pointer;Address : Pointer; Index,IValue : Longint) : Extended;assembler;
- { input: }
- { a1: s }
- { a2: address }
- { a3: index }
- { a4: ivalue }
- { output: }
- { f0: result }
- var
- oldlr: pointer;
- asm
- { save current return address }
- mflr r0
- stw r0,oldlr
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- lwz r0,oldlr
- mtlr r0
- end;
- Function CallBooleanFunc(s : Pointer;Address : Pointer; Index,IValue : Longint) : Boolean;assembler;
- { input: }
- { a1: s }
- { a2: address }
- { a3: index }
- { a4: ivalue }
- { output: }
- { a1: result }
- var
- oldlr: pointer;
- asm
- { save current return address }
- mflr r0
- stw r0,oldlr
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- lwz r0, oldlr
- mtlr r0
- end;
- Procedure CallSStringFunc(s : Pointer;Address : Pointer; INdex,IValue : Longint;
- Var Res: Shortstring);assembler;
- { input: }
- { a1: address of shortstring result (temp) }
- { a2: s }
- { a3: address }
- { a4: index }
- { stack: ivalue }
- { stack: res }
- { output: }
- { none }
- var
- oldlr: pointer;
- asm
- { save current return address }
- mflr r0
- stw r0,oldlr
- mtctr r5
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r5,r7
- bctrl
- { restore return address }
- lwz r0,oldlr
- mtlr r0
- end;
- Procedure CallSStringProc(s : Pointer;Address : Pointer;Const Value : ShortString; INdex,IVAlue : Longint);assembler;
- { input: }
- { a1: s }
- { a2: address }
- { a3: value (address of shortstring) }
- { a4: index }
- { stack: ivalue }
- { output: }
- { none }
- var
- oldlr: pointer;
- asm
- { save current return address }
- mflr r0
- stw r0,oldlr
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- lwz r0,oldlr
- mtlr r0
- end;
- {
- $Log$
- Revision 1.1 2003-11-30 19:48:20 florian
- * fixed some arm stuff
- }
|