From 76450c68badfb9bbbf616adde1210ba2625c7de7 Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Mon, 19 Dec 1994 21:44:25 +0000 Subject: [PATCH] Merge in changes for OS/2 and from new compiler. --- v7/src/runtime/conpar.scm | 33 +++++++++++++++++++++++++++++++-- v8/src/runtime/conpar.scm | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/v7/src/runtime/conpar.scm b/v7/src/runtime/conpar.scm index a6555f25e..0f1593b89 100644 --- a/v7/src/runtime/conpar.scm +++ b/v7/src/runtime/conpar.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Id: conpar.scm,v 14.33 1994/12/19 21:12:45 cph Exp $ +$Id: conpar.scm,v 14.34 1994/12/19 21:44:25 cph Exp $ Copyright (c) 1988-94 Massachusetts Institute of Technology @@ -360,6 +360,10 @@ MIT in each case. |# (define-integrable code/special-compiled/restore-interrupt-mask 1) (define-integrable code/special-compiled/stack-marker 2) (define-integrable code/special-compiled/compiled-code-bkpt 3) +(define-integrable code/interrupt-restart 4) +(define-integrable code/restore-regs 5) +(define-integrable code/apply-compiled 6) +(define-integrable code/continue-linking 7) (define (parser/special-compiled type elements state) (let ((code (vector-ref elements 1))) @@ -371,7 +375,11 @@ MIT in each case. |# type elements state)) ((fix:= code code/special-compiled/stack-marker) (parser/stack-marker type elements state)) - ((fix:= code code/special-compiled/compiled-code-bkpt) + ((or (fix:= code code/special-compiled/compiled-code-bkpt) + (fix:= code code/interrupt-restart) + (fix:= code code/restore-regs) + (fix:= code code/apply-compiled) + (fix:= code code/continue-linking)) (parse/standard-next type elements state false false)) (else (error "Unknown special compiled frame" code))))) @@ -540,6 +548,27 @@ MIT in each case. |# (if (not fsize) 5 (fix:+ 5 fsize)))) + ((fix:= code code/interrupt-restart) + (let ((homes-saved (object-datum (element-stream/ref stream 2))) + (regs-saved (object-datum (element-stream/ref stream 3)))) + ;; The first reg saved is _always_ the continuation, + ;; part of the next frame. + (fix:- (fix:+ + ;; Return code, reflect code, homes saved, regs saved, + ;; and entry point + 5 + (fix:+ homes-saved regs-saved)) + 1))) + ((fix:= code code/restore-regs) + (fix:+ 3 (object-datum (element-stream/ref stream 2)))) + ((fix:= code code/apply-compiled) + ;; Stream[2] is code entry point, [3] is frame size + (+ 3 (object-datum (element-stream/ref stream 3)))) + ((fix:= code code/continue-linking) + ;; return code, reflect code, entry size, original count, + ;; block, environment, offset, last header offset,sections, + ;; return address + (fix:- 10 1)) (else (default))))) diff --git a/v8/src/runtime/conpar.scm b/v8/src/runtime/conpar.scm index a6555f25e..0f1593b89 100644 --- a/v8/src/runtime/conpar.scm +++ b/v8/src/runtime/conpar.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Id: conpar.scm,v 14.33 1994/12/19 21:12:45 cph Exp $ +$Id: conpar.scm,v 14.34 1994/12/19 21:44:25 cph Exp $ Copyright (c) 1988-94 Massachusetts Institute of Technology @@ -360,6 +360,10 @@ MIT in each case. |# (define-integrable code/special-compiled/restore-interrupt-mask 1) (define-integrable code/special-compiled/stack-marker 2) (define-integrable code/special-compiled/compiled-code-bkpt 3) +(define-integrable code/interrupt-restart 4) +(define-integrable code/restore-regs 5) +(define-integrable code/apply-compiled 6) +(define-integrable code/continue-linking 7) (define (parser/special-compiled type elements state) (let ((code (vector-ref elements 1))) @@ -371,7 +375,11 @@ MIT in each case. |# type elements state)) ((fix:= code code/special-compiled/stack-marker) (parser/stack-marker type elements state)) - ((fix:= code code/special-compiled/compiled-code-bkpt) + ((or (fix:= code code/special-compiled/compiled-code-bkpt) + (fix:= code code/interrupt-restart) + (fix:= code code/restore-regs) + (fix:= code code/apply-compiled) + (fix:= code code/continue-linking)) (parse/standard-next type elements state false false)) (else (error "Unknown special compiled frame" code))))) @@ -540,6 +548,27 @@ MIT in each case. |# (if (not fsize) 5 (fix:+ 5 fsize)))) + ((fix:= code code/interrupt-restart) + (let ((homes-saved (object-datum (element-stream/ref stream 2))) + (regs-saved (object-datum (element-stream/ref stream 3)))) + ;; The first reg saved is _always_ the continuation, + ;; part of the next frame. + (fix:- (fix:+ + ;; Return code, reflect code, homes saved, regs saved, + ;; and entry point + 5 + (fix:+ homes-saved regs-saved)) + 1))) + ((fix:= code code/restore-regs) + (fix:+ 3 (object-datum (element-stream/ref stream 2)))) + ((fix:= code code/apply-compiled) + ;; Stream[2] is code entry point, [3] is frame size + (+ 3 (object-datum (element-stream/ref stream 3)))) + ((fix:= code code/continue-linking) + ;; return code, reflect code, entry size, original count, + ;; block, environment, offset, last header offset,sections, + ;; return address + (fix:- 10 1)) (else (default))))) -- 2.25.1