Raymond Toy pushed to branch sparc64-dev-nyi at cmucl / cmucl
Commits: 155b792b by Raymond Toy at 2017-01-17T20:34:36-08:00 Registers are longs, not ints.
Fixes a couple of compiler warnings.
- - - - - 87731e87 by Raymond Toy at 2017-01-17T20:35:03-08:00 Add EMIT-NOT-IMPLEMENTED in a few interesting vops.
- - - - - 67a3752d by Raymond Toy at 2017-01-18T19:29:29-08:00 Don't allow scheduling of not-implemented.
We want everything here to be emitted in exactly this way.
- - - - -
4 changed files:
- src/compiler/sparc64/call.lisp - src/compiler/sparc64/insts.lisp - src/compiler/sparc64/move.lisp - src/lisp/solaris-os.c
Changes:
===================================== src/compiler/sparc64/call.lisp ===================================== --- a/src/compiler/sparc64/call.lisp +++ b/src/compiler/sparc64/call.lisp @@ -179,6 +179,9 @@ (dotimes (i (1- vm:function-code-offset)) (inst word 0) (inst word 0)) + + (emit-not-implemented) + ;; The start of the actual code. ;; Fix CODE, cause the function object was passed in. (inst compute-code-from-fn code-tn code-tn start-lab temp)
===================================== src/compiler/sparc64/insts.lisp ===================================== --- a/src/compiler/sparc64/insts.lisp +++ b/src/compiler/sparc64/insts.lisp @@ -2284,21 +2284,22 @@ about function addresses and register values.") (defmacro not-implemented (&optional name) (let ((string (string name))) `(let ((length-label (gen-label))) - (inst unimp not-implemented-trap) - ;; NOTE: The branch offset helps estimate the length of the - ;; string. The actual length of the string may be equal to the - ;; displacement or it may be up to three bytes shorter at the - ;; first trailing NUL byte. The string may or may not be - ;; 0-terminated. - (inst b length-label) - (inst nop) - ,@(map 'list #'(lambda (c) - `(inst byte ,(char-code c))) - string) - ;; Append enough zeros to end on a word boundary. - ,@(make-list (mod (- (length string)) 4) - :initial-element '(inst byte 0)) - (emit-label length-label)))) + (new-assem:without-scheduling () + (inst unimp not-implemented-trap) + ;; NOTE: The branch offset helps estimate the length of the + ;; string. The actual length of the string may be equal to the + ;; displacement or it may be up to three bytes shorter at the + ;; first trailing NUL byte. The string may or may not be + ;; 0-terminated. + (inst b length-label) + (inst nop) + ,@(map 'list #'(lambda (c) + `(inst byte ,(char-code c))) + string) + ;; Append enough zeros to end on a word boundary. + ,@(make-list (mod (- (length string)) 4) + :initial-element '(inst byte 0)) + (emit-label length-label))))) ;;;; Instructions for dumping data and header objects.
===================================== src/compiler/sparc64/move.lisp ===================================== --- a/src/compiler/sparc64/move.lisp +++ b/src/compiler/sparc64/move.lisp @@ -74,6 +74,7 @@
(define-move-function (store-stack 5) (vop x y) ((any-reg descriptor-reg) (control-stack)) + (not-implemented "DEFINE-MOVE STORE-STACK") (store-stack-tn y x))
(define-move-function (store-number-stack 5) (vop x y)
===================================== src/lisp/solaris-os.c ===================================== --- a/src/lisp/solaris-os.c +++ b/src/lisp/solaris-os.c @@ -315,7 +315,7 @@ long * solaris_register_address(struct ucontext *context, int reg) { if (reg == 0) { - static int zero; + static long zero;
zero = 0;
@@ -323,7 +323,7 @@ solaris_register_address(struct ucontext *context, int reg) } else if (reg < 16) { return &context->uc_mcontext.gregs[reg + 3]; } else if (reg < 32) { - int *sp = (int *) context->uc_mcontext.gregs[REG_SP]; + long *sp = (long *) context->uc_mcontext.gregs[REG_SP];
return &sp[reg - 16]; } else
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/compare/794b815a0d6952170eb136874...