Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
cmucl
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Carl Shapiro
cmucl
Commits
e4d93998
Commit
e4d93998
authored
34 years ago
by
wlott
Browse files
Options
Downloads
Patches
Plain Diff
Initial revision
parent
1c9916d5
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
ldb/rt-assem.s
+220
-0
220 additions, 0 deletions
ldb/rt-assem.s
with
220 additions
and
0 deletions
ldb/rt-assem.s
0 → 100644
+
220
−
0
View file @
e4d93998
.
globl
.
oVncs
.
set
.
oVncs
,
0
#define LANGUAGE_ASSEMBLY
#include "lispregs.h"
#include "lisp.h"
#include "globals.h"
.
text
.
data
1
.
globl
_call_into_lisp
_call_into_lisp
:
.
long
_
.
call_into_lisp
.
text
.
align
1
.
globl
_
.
call_into_lisp
_
.
call_into_lisp
:
/*
Save
the
callee
-
saves
registers
.
*/
stm
r6
,-
64
(
r1
)
/*
Put
the
pointer
to
our
data
area
where
we
can
use
it
.
*/
mr
r14
,
r0
/*
Move
the
callers
stack
pointer
into
our
frame
pointer
.
*/
mr
r13
,
r1
/*
And
allocate
our
frame
on
the
stack
.
*/
cal
r1
,-
64
(
r1
)
/*
Set
up
the
lisp
state
.
*/
mr
CNAME
,
r2
mr
LEXENV
,
r3
mr
CFP
,
r4
mr
NARGS
,
r5
sli
NARGS
,
2
get
NULLREG
,
$NIL
/*
No
longer
in
foreign
function
call
.
*/
/*
Note
:
the
atomic
flag
should
still
be
set
.
*/
lis
A0
,
0
store
A0
,
_foreign_function_call_active
,
NL0
/*
Load
the
rest
of
lisp
state
.
*/
load
CSP
,
_current_control_stack_pointer
load
OCFP
,
_current_control_frame_pointer
/*
No
longer
atomic
.
*/
store
A0
,
PSEUDO_ATOMIC_ATOMIC
+
SYMBOL_VALUE_OFFSET
,
NL0
/*
Were
we
interrupted
?
*/
load
NL0
,
PSEUDO_ATOMIC_INTERRUPTED
+
SYMBOL_VALUE_OFFSET
ci
NL0
,
0
je
1
f
ti
7
,
r0
,
trap_PendingInterrupt
1
:
/*
Load
the
args
.
*/
l
A0
,
0
(
CFP
)
l
A1
,
4
(
CFP
)
l
A2
,
8
(
CFP
)
/*
Calculate
LRA
.
*/
get
LRA
,
$lra
+
type_OtherPointer
/*
Indirect
closure
*/
l
CODE
,
CLOSURE_FUNCTION_OFFSET
(
LEXENV
)
cal
LIP
,
FUNCTION_HEADER_CODE_OFFSET
(
CODE
)
br
LIP
.
align
3
lra
:
.
long
type_ReturnPcHeader
/*
Blow
off
any
extra
values
.
*/
cal
CSP
,
0
(
OCFP
)
/*
We
must
use
a
32
-
bit
instruction
here
*/
/*
Save
the
return
value
.
*/
mr
r2
,
A0
/*
Turn
on
pseudo
-
atomic
*/
store
CFP
,
PSEUDO_ATOMIC_ATOMIC
+
SYMBOL_VALUE_OFFSET
,
r3
/*
Store
lisp
state
*/
store
CSP
,
_current_control_stack_pointer
,
r3
store
CFP
,
_current_control_frame_pointer
,
r3
/*
No
longer
in
lisp
.
*/
store
CFP
,
_foreign_function_call_active
,
r3
/*
Were
we
interrupted
?
*/
load
r3
,
PSEUDO_ATOMIC_INTERRUPTED
+
SYMBOL_VALUE_OFFSET
ci
r3
,
0
je
1
f
/*
Yep
.
*/
ti
7
,
r0
,
trap_PendingInterrupt
1
:
/*
Restore
callee
-
saves
registers
.
*/
lm
r6
,
0
(
r1
)
/*
Return
to
C
*/
brx
r15
/*
And
reset
the
stack
.
*/
ai
r1
,
64
/*
Noise
to
keep
debuggers
happy
.
*/
.
long
0xDF07DF68
.
short
0x0110
/*
Call_into_C
On
entry
:
NL0
-
addr
of
fn
to
call
NSP
[0]...
NSP
[
n
-1
]
-
args
LRA
,
CODE
-
must
be
preserved
(
and
GCed
if
necessary
)
*/
.
text
.
globl
call_into_c
call_into_c
:
/
*
Build
a
stack
frame
.
*/
mr
OCFP
,
CFP
mr
CFP
,
CSP
cal
CSP
,
32
(
CSP
)
st
OCFP
,
0
(
CFP
)
st
LRA
,
4
(
CFP
)
st
CODE
,
8
(
CFP
)
/
*
Get
the
text
addr
we
are
supposed
to
jump
to
*/
l
r15
,
0
(
NL0
)
mr
r0
,
NL0
/
*
Set
pseudo
-
atomic
.
*/
store
CFP
,
PSEUDO_ATOMIC_ATOMIC
+
SYMBOL_VALUE_OFFSET
,
r3
/
*
Save
lisp
state
.
*/
store
CSP
,
_current_control_stack_pointer
,
r2
store
CFP
,
_current_control_frame_pointer
,
r2
/
*
Now
in
foreign
function
call
land
*/
store
CFP
,
_foreign_function_call_active
,
r2
/
*
Were
we
interrupted
?
*/
load
r3
,
PSEUDO_ATOMIC_INTERRUPTED
+
SYMBOL_VALUE_OFFSET
ci
r3
,
0
je
1
f
/*
Yep
.
*/
ti
7
,
r0
,
trap_PendingInterrupt
1
:
/
*
Get
the
first
4
args
.
*/
l
r2
,
0
(
r1
)
l
r3
,
4
(
r1
)
l
r4
,
8
(
r1
)
l
r5
,
9
(
r1
)
/
*
And
hit
it
.
*/
balr
r15
,
r15
/
*
Clear
desriptor
regs
.
We
have
to
do
this
before
we
clear
the
foreign
-
function
-
call
-
active
flag
even
if
we
are
just
going
to
load
the
saved
value
back
into
the
reg
to
make
sure
we
don
't keep
ahold
of
any
pointers
that
have
been
moved
by
GC
.
*/
lis
CODE
,
0
lis
CNAME
,
0
lis
LEXENV
,
0
lis
LRA
,
0
lis
A0
,
0
lis
A1
,
0
lis
A2
,
0
/*
No
longer
in
foreign
function
call
.
*/
/*
Note
:
the
atomic
flag
should
still
be
set
.
*/
lis
A0
,
0
store
A0
,
_foreign_function_call_active
,
NL0
/*
Load
the
rest
of
lisp
state
.
*/
load
CSP
,
_current_control_stack_pointer
load
CFP
,
_current_control_frame_pointer
/*
No
longer
atomic
.
*/
store
A0
,
PSEUDO_ATOMIC_ATOMIC
+
SYMBOL_VALUE_OFFSET
,
NL0
/*
Were
we
interrupted
?
*/
load
NL0
,
PSEUDO_ATOMIC_INTERRUPTED
+
SYMBOL_VALUE_OFFSET
ci
NL0
,
0
je
1
f
ti
7
,
r0
,
trap_PendingInterrupt
1
:
/
*
Restore
OCFP
,
LRA
&
CODE
(
they
may
have
been
GC
'ed) */
l
OCFP
,
0
(
CFP
)
l
LRA
,
4
(
CFP
)
l
CODE
,
8
(
CFP
)
/
*
Reset
the
stack
.
*/
mr
CSP
,
CFP
mr
CFP
,
OCFP
/
*
And
return
*/
cal
LIP
,
(
4
-
type_OtherPointer
)(
LRA
)
br
LIP
.
text
.
globl
undefined_tramp
undefined_tramp
:
ti
7
,
r0
,
trap_Error
.
globl
closure_tramp
closure_tramp
:
l
LEXENV
,
SYMBOL_FUNCTION_OFFSET
(
CNAME
)
l
CNAME
,
CLOSURE_FUNCTION_OFFSET
(
LEXENV
)
cal
LIP
,
FUNCTION_HEADER_CODE_OFFSET
(
CNAME
)
br
LIP
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment