File: [local] / OpenXM_contrib / pari / src / kernel / sparcv8 / Attic / level0.S (download)
Revision 1.1.1.1 (vendor branch), Sun Jan 9 17:35:33 2000 UTC (24 years, 7 months ago) by maekawa
Branch: PARI_GP
CVS Tags: maekawa-ipv6, VERSION_2_0_17_BETA, RELEASE_20000124, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, RELEASE_1_1_3, RELEASE_1_1_2 Changes since 1.1: +0 -0
lines
Import PARI/GP 2.0.17 beta.
|
/* $Id: level0.S,v 1.1.1.1 1999/09/16 13:47:58 karim Exp $ */
/* This file defines some "level 0" kernel functions for SPARC V8 */
/* With gcc, those symbols are inline and defined in level0.h */
/* overflow hiremainder */
/* addll addllx subll subllx shiftl shiftlr mulll addmul */
#ifndef __GNUC__
#if defined(NO_UNDERSCORE) || defined(linux)
# define C(entrypoint) entrypoint
#elif defined(sun) || defined(NeXT)
# ifdef __STDC__
# define C(entrypoint) _##entrypoint
# else
# define C(entrypoint) _/**/entrypoint
# endif
#endif
#if defined(sun) || defined(linux)
# define GLOBL .global
#elif defined(NeXT)
# define GLOBL .globl
#endif
#if defined(sun) || defined(linux)
.seg "text"
#elif defined(NeXT)
.text
.align 2
#endif
GLOBL C(addll),C(subll),C(addllx),C(subllx)
GLOBL C(shiftl),C(shiftlr),C(shiftl2),C(shiftlr1),C(shiftlr2)
GLOBL C(mulll),C(overflow),C(hiremainder),C(addmul)
C(addll): sethi %hi(C(overflow)),%o3
addcc %o0,%o1,%o0
addx %g0,%g0,%o2
retl
st %o2,[%o3+%lo(C(overflow))]
C(subll): sethi %hi(C(overflow)),%o3
subcc %o0,%o1,%o0
addx %g0,%g0,%o2
retl
st %o2,[%o3+%lo(C(overflow))]
C(addllx): sethi %hi(C(overflow)),%o3
ld [%o3+%lo(C(overflow))],%o2
subcc %g0,%o2,%g0
addxcc %o0,%o1,%o0
addx %g0,%g0,%o2
retl
st %o2,[%o3+%lo(C(overflow))]
C(subllx): sethi %hi(C(overflow)),%o3
ld [%o3+%lo(C(overflow))],%o2
subcc %g0,%o2,%g0
subxcc %o0,%o1,%o0
addx %g0,%g0,%o2
retl
st %o2,[%o3+%lo(C(overflow))]
C(shiftl): sethi %hi(C(hiremainder)),%o3
neg %o1,%o4
srl %o0,%o4,%o2
st %o2,[%o3+%lo(C(hiremainder))]
retl
sll %o0,%o1,%o0
C(shiftl2): sethi %hi(C(hiremainder)),%o3
srl %o0,%o2,%o4
st %o4,[%o3+%lo(C(hiremainder))]
retl
sll %o0,%o1,%o0
C(shiftlr): sethi %hi(C(hiremainder)),%o3
neg %o1,%o4
sll %o0,%o4,%o2
st %o2,[%o3+%lo(C(hiremainder))]
retl
srl %o0,%o1,%o0
C(shiftlr1): sethi %hi(C(hiremainder)),%o3
sll %o0,31,%o2
st %o2,[%o3+%lo(C(hiremainder))]
retl
srl %o0,1,%o0
C(shiftlr2): sethi %hi(C(hiremainder)),%o3
sll %o0,%o2,%o4
st %o4,[%o3+%lo(C(hiremainder))]
retl
srl %o0,%o1,%o0
C(mulll): umul %o0,%o1,%o0
sethi %hi(C(hiremainder)),%o3
rd %y,%o2
retl
st %o2,[%o3+%lo(C(hiremainder))]
C(addmul): umul %o0,%o1,%o0
sethi %hi(C(hiremainder)),%o3
ld [%o3+%lo(C(hiremainder))],%o2
rd %y,%o4
addcc %o0,%o2,%o0
addx %g0,%o4,%o4
retl
st %o4,[%o3+%lo(C(hiremainder))]
#if defined(sun) || defined(linux)
.seg "bss"
.align 4
C(hiremainder): .skip 4
C(overflow): .skip 4
#elif defined(NeXT)
.comm C(overflow),8
.comm C(hiremainder),8
#endif
#endif /* !defined(__GNUC__) */