1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GR 3 M68000 Hi-Performance Microprocessor Division 4 M68060 Software Package 5 Production Release P1.00 -- October 10, 1994 6 7 M68060 Software Package Copyright © 1993, 199 8 9 THE SOFTWARE is provided on an "AS IS" basis a 10 To the maximum extent permitted by applicable 11 MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPR 12 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILIT 13 and any warranty against infringement with reg 14 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and 15 16 To the maximum extent permitted by applicable 17 IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY D 18 (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOS 19 BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORM 20 ARISING OF THE USE OR INABILITY TO USE THE SOF 21 Motorola assumes no responsibility for the mai 22 23 You are hereby granted a copyright license to 24 so long as this entire notice is retained with 25 redistributed versions, and that such modified 26 No licenses are granted by implication, estopp 27 or trademarks of Motorola, Inc. 28 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 29 68060 INTEGER SOFTWARE PACKAGE (Library versio 30 ---------------------------------------------- 31 32 The file ilsp.s contains the "Library version" 33 68060 Integer Software Package. Routines inclu 34 module can be used to emulate 64-bit divide an 35 and the "cmp2" instruction. These instructions 36 implemented in hardware on the 68060 and norma 37 exception vector #61 "Unimplemented Integer In 38 39 By re-compiling a program that uses these inst 40 making subroutine calls in place of the unimpl 41 instructions, a program can avoid the overhead 42 taking the exception. 43 44 Release file format: 45 -------------------- 46 The file ilsp.sa is essentially a hexadecimal 47 release package. This is the ONLY format which 48 The hex image was created by assembling the so 49 then converting the resulting binary output im 50 ASCII text file. The hexadecimal numbers are l 51 using the Motorola Assembly Syntax assembler d 52 (define constant longword). The file can be co 53 assembly syntaxes by using any word processor 54 search and replace function. 55 56 To assist in assembling and linking this modul 57 the installer should add a symbolic label to t 58 This will allow calling routines to access the 59 of this package. 60 61 The source code ilsp.s has also been included 62 documentation purposes. 63 64 Release file structure: 65 ----------------------- 66 The file ilsp.sa contains an "Entry-Point" sec 67 code section. The ILSP has no "Call-Out" secti 68 is the "Entry-Point" section. In order to acce 69 package, a program must "bsr" or "jsr" to the 70 below in "68060ILSP Entry Points" that corresp 71 function. A branch instruction located at the 72 within the package will then enter the correct 73 74 The entry point addresses at the beginning of 75 fixed so that a program calling the routines w 76 re-compiled with every new 68060ILSP release. 77 78 For example, to use a 64-bit multiply instruct 79 do a "bsr" or "jsr" to the entry point defined 80 the 060ILSP entry table. A compiler generated 81 for unsigned multiply could look like: 82 83 # mulu.l <ea>,Dh:Dl 84 # mulu.l _multiplier,%d1:%d0 85 86 subq.l &0x8,%sp # make room fo 87 pea (%sp) # pass: result 88 mov.l %d0,-(%sp) # pass: multip 89 mov.l _multiplier,-(%sp) # pass: mul 90 bsr.l _060LISP_TOP+0x18 # branch to 91 add.l &0xc,%sp # clear argume 92 mov.l (%sp)+,%d1 # load result[ 93 mov.l (%sp)+,%d0 # load result[ 94 95 For a divide: 96 97 # divu.l <ea>,Dr:Dq 98 # divu.l _divisor,%d1:%d0 99 100 subq.l &0x8,%sp # make room fo 101 pea (%sp) # pass: result 102 mov.l %d0,-(%sp) # pass: divide 103 mov.l %d1,-(%sp) # pass: divide 104 mov.l _divisor,-(%sp) # pass: diviso 105 bsr.l _060LISP_TOP+0x08 # branch to 106 add.l &0xc,%sp # clear argume 107 mov.l (%sp)+,%d1 # load remaind 108 mov.l (%sp)+,%d0 # load quotien 109 110 The library routines also return the correct c 111 register value. If this is important, then the 112 routine must make sure that the value isn't lo 113 other items off of the stack. 114 115 An example of using the "cmp2" instruction is 116 117 # cmp2.l <ea>,Rn 118 # cmp2.l _bounds,%d0 119 120 pea _bounds # pass ptr to 121 mov.l %d0,-(%sp) # pass Rn 122 bsr.l _060LSP_TOP_+0x48 # branch to 123 mov.w %cc,_tmp # save off con 124 addq.l &0x8,%sp # clear argume 125 126 Exception reporting: 127 -------------------- 128 If the instruction being emulated is a divide 129 operand is a zero, then the library routine, a 130 instruction, executes an implemented divide us 131 source operand so that an "Integer Divide-by-Z 132 will be taken. Although the exception stack fr 133 point to the correct instruction, the user wil 134 to record that such an event occurred if desir 135 136 68060ILSP entry points: 137 ----------------------- 138 _060ILSP_TOP: 139 0x000: _060LSP__idivs64_ 140 0x008: _060LSP__idivu64_ 141 142 0x010: _060LSP__imuls64_ 143 0x018: _060LSP__imulu64_ 144 145 0x020: _060LSP__cmp2_Ab_ 146 0x028: _060LSP__cmp2_Aw_ 147 0x030: _060LSP__cmp2_Al_ 148 0x038: _060LSP__cmp2_Db_ 149 0x040: _060LSP__cmp2_Dw_ 150 0x048: _060LSP__cmp2_Dl_
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.