|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: F T
Length: 3211 (0xc8b)
Types: TextFile
Names: »FIXED_ATTRIBUTES_ASM«
└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
└─⟦77aa8350c⟧ »DATA«
└─⟦f794ecd1d⟧
└─⟦24d1ddd49⟧
└─⟦this⟧
; The use of this system is subject to the software license terms and
; conditions agreed upon between Rational and the Customer.
;
; Copyright 1988 by Rational.
;
; RESTRICTED RIGHTS LEGEND
;
; Use, duplication, or disclosure by the Government is subject to
; restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
; Technical Data and Computer Software clause at 52.227-7013.
;
;
; Rational
; 3320 Scott Boulevard
; Santa Clara, California 95054-3197
;
; PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
; USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
; IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
; AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
; 1976. CREATED 1988. ALL RIGHTS RESERVED.
;
;
.module "FIXED ATTRIBUTES"
.include "^^standard_assembler_include_file"
.include "^^common.runtime_definitions"
comp_unit runtime_compunit
.sect ada_runtime_code,code,relocatable,alignment:=2
.gbl.a __mantissa
.gbl.a __large
;
; function mantissa (l : integer;
; h : integer) return integer;
;
subprogram sp_rt,sp.mantissa,linkage.simple
__mantissa:
.local
$l'offset equ 4
$h'offset equ 8
moveq.l #0,d0 ; assume null range
move.l ($l'offset,sp),d1 ; d1 := l
movea.l ($h'offset,sp),a1 ; a1 := h
cmp.l a1,d1 ; compare l to h
bgt.s $done ; if l > h range is null
tst.l d1
bgt.s $l_ok
neg.l d1
$l_ok: exg.l d1,a1
tst.l d1
bgt.s $h_ok
neg.l d1
$h_ok: cmp.l a1,d1
bhi.s $d1_is_max
move.l a1,d1
$d1_is_max:
subq.l #1,d1
ble.s $done ; range was 0..0 or 0..1
bfffo d1{0:32},d1 ; d1 := bit # of 1st set bit
moveq.l #32,d0
sub.l d1,d0 ; compute 'manitssa
$done: rtd #8
;
; function large (L : integer;
; H : integer;
; S : integer) return integer;
;
subprogram sp_rt,sp.large,linkage.simple
__large:
.local
$l'offset equ 4
$h'offset equ 8
$s'offset equ 12
move.l ($h'offset,sp),-(sp) ; push h
statement 0,0,1
move.l ($l'offset+4,sp),-(sp) ; push l
statement 0,0,2
bsr.s __mantissa ; find 'mantissa (l, h)
statement 0,0,0
moveq.l #-1,d1 ; d1 := -1 (all ones)
bfextu d1{0:d0},d0 ; d0 lsbs of d0 = 1 others = 0
add.l ($s'offset,sp),d1 ; d1 := 'small - 1
eor.l d1,d0 ; d0 := d0 xor 'small - 1
rtd #12 ; result is in d0
end_subprograms
.end