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