OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [arch/] [m68k/] [ifpsp060/] [ilsp.doc] - Blame information for rev 11

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.