123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- {
- $Id$
- This file is part of the Free Pascal run time library.
- Copyright (c) 2001 by Jonas Maebe,
- 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.
- ---------------------------------------------------------------------}
- {$ASMMODE ATT}
- Function CallIntegerFunc(s: Pointer; Address: Pointer; Index, IValue: LongInt): Int64; assembler;
- { input: }
- { r3: s }
- { r4: address }
- { r5: index }
- { r6: ivalue }
- { output: }
- { r3-r4: result }
- asm
- { save current return address }
- mflr r30
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- mtlr r30
- end;
- Function CallIntegerProc(s : Pointer;Address : Pointer;Value : Integer; INdex,IValue : Longint) : Integer;assembler;
- { input: }
- { r3: s }
- { r4: address }
- { r5: index }
- { r6: ivalue }
- { output: }
- { r3: result }
- asm
- { save current return address }
- mflr r30
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- mtlr r30
- end;
- Function CallExtendedFunc(s : Pointer;Address : Pointer; INdex,IValue : Longint) : Extended;assembler;
- { input: }
- { r3: s }
- { r4: address }
- { r5: index }
- { r6: ivalue }
- { output: }
- { fr1: result }
- asm
- { save current return address }
- mflr r30
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- mtlr r30
- end;
- Function CallExtendedProc(s : Pointer;Address : Pointer;Value : Extended; INdex,IVAlue : Longint) : Integer;assembler;
- { input: }
- { r3: s }
- { r4: address }
- { fr3: value }
- { r7: index }
- { r8: ivalue }
- { output: }
- { r3: result }
- asm
- { save current return address }
- mflr r30
- cmpli r7,0
- mtctr r4
- beq LNoIndex
- fmr fr2,fr3
- LNoIndex:
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r8
- bctrl
- { restore return address }
- mtlr r30
- end;
- Function CallBooleanFunc(s : Pointer;Address : Pointer; Index,IValue : Longint) : Boolean;assembler;
- { input: }
- { r3: s }
- { r4: address }
- { r5: index }
- { r6: ivalue }
- { output: }
- { r3: result }
- asm
- { save current return address }
- mflr r30
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- mtlr r30
- end;
- Function CallSStringFunc(s : Pointer;Address : Pointer; INdex,IValue : Longint)
- : Shortstring; assembler;
- { input: }
- { r3: address of shortstring result (temp) }
- { r4: s }
- { r5: address }
- { r6: index }
- { r7: ivalue }
- { output: }
- { r3: result }
- asm
- { save current return address }
- mflr r30
- mtctr r5
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r5,r7
- bctrl
- { restore return address }
- mtlr r30
- end;
- Procedure CallSStringProc(s : Pointer;Address : Pointer;Const Value : ShortString; INdex,IVAlue : Longint);assembler;
- { input: }
- { r3: s }
- { r4: address }
- { r5: value (address of shortstring) }
- { r6: index }
- { r7: ivalue }
- { output: }
- { none }
- asm
- { save current return address }
- mflr r30
- mtctr r4
- { always pass ivalue as second parameter, it doesn't matter if it }
- { isn't used }
- mr r4,r6
- bctrl
- { restore return address }
- mtlr r30
- end;
- {
- $Log$
- Revision 1.1 2001-10-28 14:08:37 jonas
- + initial implementation, still needs changes for self pointer register
- Revision 1.3 2001/10/20 17:25:22 peter
- }
|