/[cmucl]/src/lisp/ppc-assem.S
ViewVC logotype

Log of /src/lisp/ppc-assem.S

Parent Directory Parent Directory | Revision Log Revision Log


Links to HEAD: (view) (annotate)
Sticky Tag:

Revision 1.19 - (view) (annotate) - [select for diffs]
Sat Feb 25 04:35:58 2006 UTC (8 years, 1 month ago) by rtoy
Branch: MAIN
CVS Tags: GIT-CONVERSION, HEAD, RELEASE_19f, RELEASE_20a, RELEASE_20b, amd64-dd-start, cross-sol-x86-2010-12-20, cross-sol-x86-base, cross-sol-x86-merged, cross-sparc-branch-base, double-double-array-base, double-double-array-checkpoint, double-double-base, double-double-init-%make-sparc, double-double-init-checkpoint-1, double-double-init-ppc, double-double-init-sparc, double-double-init-sparc-2, double-double-init-x86, double-double-irrat-end, double-double-irrat-start, double-double-reader-base, double-double-reader-checkpoint-1, double-double-sparc-checkpoint-1, intl-2-branch-base, intl-branch-2010-03-18-1300, intl-branch-base, intl-branch-working-2010-02-11-1000, intl-branch-working-2010-02-19-1000, label-2009-03-16, label-2009-03-25, merge-sse2-packed, merge-with-19f, merged-unicode-utf16-extfmt-2009-06-11, portable-clx-base, portable-clx-import-2009-06-16, post-merge-intl-branch, pre-merge-intl-branch, pre-telent-clx, release-19d, release-19d-base, release-19d-pre1, release-19d-pre2, release-19e, release-19e-base, release-19e-pre1, release-19e-pre2, release-19f-base, release-19f-pre1, release-20a-base, release-20a-pre1, release-20b-pre1, release-20b-pre2, snapshot-2006-03, snapshot-2006-04, snapshot-2006-05, snapshot-2006-06, snapshot-2006-07, snapshot-2006-08, snapshot-2006-09, snapshot-2006-10, snapshot-2006-11, snapshot-2006-12, snapshot-2007-01, snapshot-2007-02, snapshot-2007-03, snapshot-2007-04, snapshot-2007-05, snapshot-2007-06, snapshot-2007-07, snapshot-2007-08, snapshot-2007-09, snapshot-2007-10, snapshot-2007-11, snapshot-2007-12, snapshot-2008-01, snapshot-2008-02, snapshot-2008-03, snapshot-2008-04, snapshot-2008-05, snapshot-2008-06, snapshot-2008-07, snapshot-2008-08, snapshot-2008-09, snapshot-2008-10, snapshot-2008-11, snapshot-2008-12, snapshot-2009-01, snapshot-2009-02, snapshot-2009-04, snapshot-2009-05, snapshot-2009-07, snapshot-2009-08, snapshot-2009-11, snapshot-2009-12, snapshot-2010-01, snapshot-2010-02, snapshot-2010-03, snapshot-2010-04, snapshot-2010-05, snapshot-2010-06, snapshot-2010-07, snapshot-2010-08, snapshot-2010-11, snapshot-2010-12, snapshot-2011-01, snapshot-2011-02, snapshot-2011-03, snapshot-2011-04, snapshot-2011-06, snapshot-2011-07, snapshot-2011-09, sparc-tramp-assem-2010-07-19, sparc-tramp-assem-base, sse2-base, sse2-checkpoint-2008-10-01, sse2-merge-with-2008-10, sse2-merge-with-2008-11, sse2-packed-2008-11-12, sse2-packed-base, unicode-snapshot-2009-05, unicode-snapshot-2009-06, unicode-string-buffer-base, unicode-string-buffer-impl-base, unicode-utf16-base, unicode-utf16-char-support-2009-03-25, unicode-utf16-char-support-2009-03-26, unicode-utf16-extfmt-2009-03-27, unicode-utf16-extfmt-2009-06-11, unicode-utf16-extfmts-pre-sync-2008-11, unicode-utf16-extfmts-sync-2008-12, unicode-utf16-string-support, unicode-utf16-sync-2008-07, unicode-utf16-sync-2008-09, unicode-utf16-sync-2008-11, unicode-utf16-sync-2008-12, unicode-utf16-sync-label-2009-03-16
Branch point for: RELEASE-19F-BRANCH, RELEASE-20A-BRANCH, RELEASE-20B-BRANCH, amd64-dd-branch, cross-sol-x86-branch, cross-sparc-branch, double-double-array-branch, double-double-branch, double-double-reader-branch, intl-2-branch, intl-branch, portable-clx-branch, release-19d-branch, release-19e-branch, sparc-tramp-assem-branch, sse2-branch, sse2-packed-branch, unicode-string-buffer-branch, unicode-string-buffer-impl-branch, unicode-utf16-branch, unicode-utf16-extfmt-branch
Changes since 1.18: +1 -1 lines
Diff to previous 1.18 , to selected 1.8
Oops. Register A0 was not properly initialized for the undefined
foreign symbol error trap.

Revision 1.18 - (view) (annotate) - [select for diffs]
Tue Feb 7 01:14:10 2006 UTC (8 years, 2 months ago) by rtoy
Branch: MAIN
Changes since 1.17: +2 -2 lines
Diff to previous 1.17 , to selected 1.8
fpu_restore was missing a blr instruction.  (Noted by Cyrus Harmon.)
How could this have worked at all?

Revision 1.17 - (view) (annotate) - [select for diffs]
Wed Jan 18 15:21:26 2006 UTC (8 years, 3 months ago) by rtoy
Branch: MAIN
CVS Tags: snapshot-2006-02
Changes since 1.16: +80 -0 lines
Diff to previous 1.16 , to selected 1.8
Merge ppc_gencgc_branch to HEAD.

Revision 1.6.2.4 - (view) (annotate) - [select for diffs]
Mon Dec 19 01:10:14 2005 UTC (8 years, 4 months ago) by rtoy
Branch: ppc_gencgc_branch
CVS Tags: ppc_gencgc_snap_2005-12-17, ppc_gencgc_snap_2006-01-06
Changes since 1.6.2.3: +94 -20 lines
Diff to previous 1.6.2.3 , to branch point 1.6 , to next main 1.19 , to selected 1.8
Merge code from main branch of 2005-12-17 to ppc gencgc branch.  Still
doesn't work of course.

Revision 1.16 - (view) (annotate) - [select for diffs]
Sat Dec 17 16:30:02 2005 UTC (8 years, 4 months ago) by rtoy
Branch: MAIN
CVS Tags: snapshot-2006-01
Changes since 1.15: +2 -0 lines
Diff to previous 1.15 , to selected 1.8
Missing a nop in breakpoint guts.

Revision 1.15 - (view) (annotate) - [select for diffs]
Sun Dec 11 20:30:47 2005 UTC (8 years, 4 months ago) by rtoy
Branch: MAIN
Changes since 1.14: +2 -29 lines
Diff to previous 1.14 , to selected 1.8
Remove unused code.

Revision 1.14 - (view) (annotate) - [select for diffs]
Sun Dec 11 18:30:51 2005 UTC (8 years, 4 months ago) by rtoy
Branch: MAIN
Changes since 1.13: +22 -0 lines
Diff to previous 1.13 , to selected 1.8
Make ppc port look a little more like sparc by making
fdefn-raw-addr-slot actually hold a tagged pointer instead of the raw
address.  Not sure if this is good or not, but making it like sparc
makes ppc a little easier.

Might need a cross-compile; the 2005-12-1-ppc cross-compile script
works fine.

assembly/ppc/arith.lisp:
o Static functions are now tagged, so need to adjust address before
  branching to them.

compiler/generic/new-genesis.lisp:
o Fill fdefn-raw-addr-slot with the tagged address instead of
  converting to untagged.

compiler/ppc/call.lisp:
o fdefn-raw-addr-slot is tagged, so need to adjust it before branching
  to function.

compiler/ppc/cell.lisp:
o No need to adjust function address before storing it in the
  fdefn-raw-addr-slot.

compiler/ppc/static-fn.lisp:
o Static functions are tagged, so need to adjust address before
  branching to them.

lisp/gc.c:
o Don't need scav_fdefn, because the fdefn is a tagged object now.

lisp/ppc-assem.S:
o Make undefined_tramp and closure_tramp be tagged instead of
  untagged.

lisp/purify.c
o RAW_ADDR_OFFSET is 0 now, like sparc.

Revision 1.13 - (view) (annotate) - [select for diffs]
Sun Dec 11 03:45:36 2005 UTC (8 years, 4 months ago) by rtoy
Branch: MAIN
Changes since 1.12: +2 -2 lines
Diff to previous 1.12 , to selected 1.8
The boxed register reg_FDEFN is r10, but r10 is one of the registers
used in the C calling convention, so it's a bad idea to have reg_FDEFN
be r10.

So, make r10 be the new unboxed register reg_NL7 and replace reg_L2
with reg_FDEFN.  (I was too lazy to renumber all registers, and I
don't think it matters where reg_FDEFN is.)

A simple cross-compile is needed.  Use boot-2005-12-1-ppc.lisp for the
cross-compile script.

compiler/ppc/vm.lisp:
o Make old FDEFN be the new unboxed register NL7.
o Rename L2 to be FDEFN, removing L2 complete.

lisp/ppc-assem.S:
o reg_L2 no longer exists, so don't use it.

lisp/ppc-lispregs.h:
o Make the corresponding changes here that were made in vm.lisp.

bootfiles/19c/boot-2005-12-1-ppc.lisp:
o Simple cross-compile script for this change.

Revision 1.12 - (view) (annotate) - [select for diffs]
Fri Oct 21 02:36:42 2005 UTC (8 years, 6 months ago) by rtoy
Branch: MAIN
CVS Tags: snapshot-2005-11, snapshot-2005-12
Changes since 1.11: +2 -1 lines
Diff to previous 1.11 , to selected 1.8
The stack pointer is supposed to be on a 16-byte boundary, so make
sure FULL_FRAME_SIZE is a multiple of 16.  (From a patch to sbcl from
Cyrus Harmon.)

Revision 1.11 - (view) (annotate) - [select for diffs]
Wed Aug 17 03:40:16 2005 UTC (8 years, 8 months ago) by rtoy
Branch: MAIN
CVS Tags: release-19c, release-19c-base, release-19c-pre1, snapshot-2005-09, snapshot-2005-10
Branch point for: release-19c-branch
Changes since 1.10: +6 -6 lines
Diff to previous 1.10 , to selected 1.8
Change ## to the traditional /**/ so that we can compile CMUCL on
Tiger (10.4) with gcc (4.x) or Jaguar (10.2) gcc (3.x).  Not the best
solution, but I think gcc 4 doesn't handle ## the same as gcc 3.  But
this allows using the default gcc on both platforms to compile CMUCL.

Revision 1.6.2.3 - (view) (annotate) - [select for diffs]
Sun May 15 20:01:31 2005 UTC (8 years, 11 months ago) by rtoy
Branch: ppc_gencgc_branch
Changes since 1.6.2.2: +48 -77 lines
Diff to previous 1.6.2.2 , to branch point 1.6 , to selected 1.8
Merge snapshot-2005-05 to this branch.

Revision 1.10 - (view) (annotate) - [select for diffs]
Sat Apr 16 02:03:22 2005 UTC (9 years ago) by rtoy
Branch: MAIN
CVS Tags: release-19b-base, release-19b-pre1, release-19b-pre2, snapshot-2005-05, snapshot-2005-06, snapshot-2005-07, snapshot-2005-08
Branch point for: release-19b-branch
Changes since 1.9: +22 -10 lines
Diff to previous 1.9 , to selected 1.8
New pseudo-atomic scheme that looks more like sparc where we use the
LSB of alloc-tn to denote pseudo-atomic interrupted.  We still need
the flag-gn (hardwired to NL3) as a temporary though because we need
somewhere to store the LSB of alloc-tn so we can trap if it's not
zero.

ppc/macros.lisp:
o New pseudo-atomic macro implementing the change.

lisp/ppc-arch.c:
o Update arch_set_pseudo_atomic_interrupted to set the LSB of
  alloc-tn.
o Catch the TWNEI reg_NL3, 0 instruction that denotes a deferred
  interrupt.

lisp/ppc-assem.S:
o Update assembly to code to set and test pseudo-atomic stuff like the
  pseudo-atomic macro does.

Revision 1.9 - (view) (annotate) - [select for diffs]
Fri Apr 8 04:11:02 2005 UTC (9 years ago) by rtoy
Branch: MAIN
Changes since 1.8: +11 -37 lines
Diff to previous 1.8
The ppc port no longer uses the ppc-fun-hack where the
function-pointer and instance-pointer tags were swapped compared to
all other ports.

Remove code for ppc-fun-hack.

Revision 1.6.2.2 - (view) (annotate) - [select for diffs]
Tue Apr 5 03:41:10 2005 UTC (9 years ago) by rtoy
Branch: ppc_gencgc_branch
CVS Tags: ppc_gencgc_snap_2005-05-14
Changes since 1.6.2.1: +40 -2 lines
Diff to previous 1.6.2.1 , to branch point 1.6 , to selected 1.8
Checkin the current code for gencgc.  This is a basic port of sparc
gencgc for ppc.  This is not yet functional.  Allocation seems to
work, but GC does not.  We're just making a checkpoint now.

compiler/ppc/macros.lisp:
o Update allocation macro to support gencgc.  Need a temp-tn as a
  scratch register for inline allocation.
o Update with-fixed-allocation to use allocation macro correctly for
  gencgc.

assembly/ppc/array.lisp:
o Update for new allocation macro for gencgc.

code/ppc-vm.lisp:
o Define *scavenge-read-only-space*

compiler/ppc/alloc.lisp:
compiler/ppc/array.lisp:
compiler/ppc/call.lisp:
o Update to use new allocation macro for gencgc.

compiler/ppc/parms.lisp:
o Add necessary static symbols to support gencgc.

lisp/Config.ppc_darwin:
o Update to build with gencgc as needed.

lisp/Darwin-os.c:
o Update C code for gencgc.  Mostly for checking if pointer is in the
  dynamic space.
o Many debugging printf's enabled.

lisp/gencgc.c:
o Adjust sparc version appropriately for ppc.
o Enable many gencgc self-checks.

lisp/gencgc.h:
o Update PAGE_SIZE for ppc, which is 4K.

lisp/ppc-arch.c:
o Add necessary code to handle the allocation traps for gencgc.
  Basically ported sparc version for ppc.

lisp/ppc-assem.S:
o The way pseudo-atomic is done has been changed, so make the assembly
  code match.  PA is now more like sparc where the LSB is the
  PA-interrupted bit.
o do_pending_interrupt may need work.

lisp/ppc-validate.h:
o Make the READ_ONLY_SPACE_SIZE right.
o Define CONTROL_STACK_END.

lisp/purify.c:
o Enable debugging printfs
o Adjust purify for gencgc, basically copying sparc version.

Revision 1.8 - (view) (annotate) - [selected]
Fri Mar 18 05:30:50 2005 UTC (9 years, 1 month ago) by rtoy
Branch: MAIN
CVS Tags: snapshot-2005-04
Changes since 1.7: +26 -15 lines
Diff to previous 1.7
Port Helmut's trace/known-return to ppc.  Fix some bugs along the way
as well.

lisp/breakpoint.c:
o Enable function-end stuff in compute_offset for DARWIN too.
o Lots of printf's so we can see what's happening on ppc since gdb is
  majorly broken there.

lisp/ppc-assem.S:
o Actually implement the function-end breakpoint template.  Basically
  copied the sparc version, with appropriate mods.

lisp/ppc-arch.c:
o Add TWLLEI_R0 macro to create the appropriate trap instructions that
  we need, and use as appropriate.
o arch_install_breakpoint was actually broken and installed a twllgei
  instruction instead of twllei.
o arch_do_displaced_inst was also broken.  It didn't install the
  after-break-point trap after the breakpoint trap.  And it also
  didn't continue running the code and returned instead.  That's
  wrong.
o The trap_AfterBreakpoint case in sigill_handler was inserting the
  wrong instruction back.  (Probably too much copying of the sparc
  port.)

Revision 1.7 - (view) (annotate) - [select for diffs]
Thu Feb 24 04:07:59 2005 UTC (9 years, 1 month ago) by rtoy
Branch: MAIN
CVS Tags: snapshot-2005-03
Changes since 1.6: +11 -1 lines
Diff to previous 1.6 , to selected 1.8
o Fix typo.
o When PPC_FUN_HACK is not defined, the raw_addr slot of an fdefn
  object should be on a word boundary, so change undefined_tramp and
  closure_tramp to be on such a boundary.  Previously, these had a
  lowtag of 1.  With this change, can we get rid of the other parts of
  a function definition that we don't use?

Revision 1.6.2.1 - (view) (annotate) - [select for diffs]
Sat Feb 12 16:14:15 2005 UTC (9 years, 2 months ago) by rtoy
Branch: ppc_gencgc_branch
Changes since 1.6: +12 -10 lines
Diff to previous 1.6 , to selected 1.8
Change how pseudo-atomic works on Mac OS X.  Instead of using a
separate register for the flag, and using a negative alloc-tn to mean
the pseudo-atomic section was interrupted, we make it more like sparc,
where the pseudo-atomic interrupted is the least signficant bit of
alloc-tn.

* compiler/ppc/macros.lisp:
  o Make the PSEUDO-ATOMIC macro work as desired.

* lisp/ppc-arch.c
  o Set the LSB of alloc-tn when pseudo-atomic is interrupted.
  o Check for the twnei instruction which is now used to see if
    pseudo-atomic was interrupted.

* lisp/ppc/assem.S
  o Use the new pseudo-atomic scheme.

Revision 1.6 - (view) (annotate) - [select for diffs]
Wed Feb 9 00:50:30 2005 UTC (9 years, 2 months ago) by rtoy
Branch: MAIN
Branch point for: ppc_gencgc_branch
Changes since 1.5: +51 -18 lines
Diff to previous 1.5 , to selected 1.8
Save FP register args before calling lazy_resolve_linkage.  (Might not
be necessary, but this is safe.)

Revision 1.5 - (view) (annotate) - [select for diffs]
Sun Feb 6 19:43:15 2005 UTC (9 years, 2 months ago) by rtoy
Branch: MAIN
Changes since 1.4: +117 -0 lines
Diff to previous 1.4 , to selected 1.8
Initial support for linkage-tables on PPC/Darwin.  This is a
relatively straightforward port of the sparc version of
linkage-tables.  Some refinements are probably still needed, as well
as some testing.

Use boot-2005-02-ppc-linkage.lisp to bootstrap this change from the
2005-02 snapshot.

* code/ppc-vm.lisp
  o Add appropriate FOREIGN-SYMBOL-ADDRESS-AUX and FIND-FOREIGN-SYMBOL
    functions for linkage-table.

* compiler/generic/new-genesis.lisp
  o Basically do the same as the sparc port for linkage-tables.
  o need to extern-alien-name on the cold linkages since they C names
    depend on the backend conventions.

* compiler/ppc/alloc.lisp
  o Load "undefined_tramp" appropriately for linkage-tables.

* compiler/ppc/c-call.lisp
  o Define new vops (FOREIGN-SYMBOL-CODE-ADDRESS,
    FOREIGN-SYMBOL-DATA-ADDRESS) for linkage-tables so we can access
    correctly.

* compiler/ppc/cell.lisp
  o Load "closure_tramp" appropriately for linkage-tables
  o Load "undefined_tramp" appropriately for linkage-tables

* compiler/ppc/parms.lisp
  o Put the foreign linkage space start at the end of the static space
    to make it easier to bootstrap.  (We need already mapped memory.)
    We can move this later.
  o Correct TARGET-FOREIGN-LINKAGE-ENTRY-SIZE.
  o Add new static-symbol *linkage-table-data*
  o While were at it, add SPARE-9 and SPARE-0 static symbols so we
    have 10 spares.

* lisp/Config.ppc_darwin
  o Add -DLINKAGE_TABLE to CFLAGS/ASFLAGS if we have linkage-table
    support.

* lisp/Darwin-os.c
  o Add os_dlsym to support linkage-tables.  (This nees a little
    refactoring because we just copied the #defines for dlopen modes.)

* lisp/os-common.c
  o The checking of the linkage tables that is done for sparc almost
    works for ppc, but not quite.  Implement one for ppc.

* lisp/ppc-arch.c
  o Add PPC version of arch_make_jump_entry, arch_make_linkage_entry,
    arch_linkage_entry.

* lisp/ppc-assem.S
  o Add lazy_resolve_linkage to support linkage-tables.  This needs
    some more work.
  o Add undefined_foreign_symbol_trap.  This probably needs work, and
    definitely needs testing.

* lisp/ppc-validate.h
  o Define the start of the linkage space and size.

Revision 1.4 - (view) (annotate) - [select for diffs]
Fri Jul 30 00:53:41 2004 UTC (9 years, 8 months ago) by rtoy
Branch: MAIN
CVS Tags: snapshot-2004-09, snapshot-2004-10, snapshot-2004-11, snapshot-2004-12, snapshot-2005-01, snapshot-2005-02
Changes since 1.3: +11 -0 lines
Diff to previous 1.3 , to selected 1.8
lispregs.h, sparc-lispregs.h:
  o Move the SC_OFFSET_{HI,LO} macros from sparc-lispregs to
    lispregs.h, so they can be used elsewhere.

ppc-lispregs.h:
  o Define the register numbers so they can be used in the SC_OFFSET
    macros.

ppc-assem.S:
  o Document what the byte 18<<2, 0, 0, 24 is supposed to do.
  o Use the SC_OFFSET macros in undefined_tramp instead of hard-wiring
    the register number.

Revision 1.3 - (view) (annotate) - [select for diffs]
Thu Jul 29 15:56:59 2004 UTC (9 years, 8 months ago) by rtoy
Branch: MAIN
Changes since 1.2: +1 -1 lines
Diff to previous 1.2 , to selected 1.8
Fix typo introduced in previous fix.

Revision 1.2 - (view) (annotate) - [select for diffs]
Thu Jul 29 11:52:24 2004 UTC (9 years, 8 months ago) by rtoy
Branch: MAIN
Changes since 1.1: +9 -2 lines
Diff to previous 1.1 , to selected 1.8
(defun foo () (zot)) when compiled and run gave a silly message about
#C(0d0 0d0) failing a typecase.  Then doing a backtrace gave another
error about some negative number not being a positive fixnum.

The former error is caused by a bad definition of undefined_tramp.
The latter error is caused by the debugger not being able to compute
the offset correctly.

(Fixes ported from sbcl.)

Revision 1.1 - (view) (annotate) - [select for diffs]
Tue Jul 13 00:26:22 2004 UTC (9 years, 9 months ago) by pmai
Branch: MAIN
CVS Tags: snapshot-2004-08
Diff to selected 1.8
First merge of the C side of the OS X/Darwin port.  Besides adding Darwin
versions of all the required things, this commit separates the
interrupt handler proper (now interrupt_handle_now_handler) from the
actual work-horse (interrupt_handle_now), which is now only ever called
from the two interrupt handlers, interrupt_handle_now_handler and
maybe_now_maybe_later.  This follows similar changes in SBCL, and is in
fact needed in order to properly use sigreturn in signal handlers, as
required to work around a problem with the G5.

This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.

  Diffs between and
  Type of Diff should be a

Sort log by:

  ViewVC Help
Powered by ViewVC 1.1.5