#| -*-Scheme-*-
-$Id: fakeprim.scm,v 1.7 1995/03/09 22:15:14 adams Exp $
+$Id: fakeprim.scm,v 1.8 1995/03/13 23:23:45 adams Exp $
Copyright (c) 1994 Massachusetts Institute of Technology
(cookie-call %small-fixnum? '#F value 'precision-bits)
+(define %compiled-entry?
+ (make-operator/simple "#[compiled-entry?]" '(PROPER-PREDICATE)))
+
+(define %compiled-entry-maximum-arity?
+ ;; (call ',%compiled-entry-maximum-arity? '#F 'count value)
+ ;; Tests if the compiled entry has the specified maximum arity.
+ (make-operator/simple "#[compiled-entry-maximum-arity?]"
+ '(PROPER-PREDICATE)))
+
+(cookie-call %compiled-entry-maximum-arity? '#F 'n entry)
(define %profile-data
;; (CALL ',%profile-data '#F '<data>)
'(SIDE-EFFECT-INSENSITIVE)
'(OUT-OF-LINE-HOOK))))
'(&+ &- &* &/ quotient remainder))
+
+(for-each
+ (lambda (prim-name)
+ (let ((prim (make-primitive-procedure prim-name)))
+ (set! compiler:primitives-with-no-open-coding
+ (cons prim-name compiler:primitives-with-no-open-coding))
+ (hash-table/put! *operator-properties*
+ prim
+ (list ;;'(SIMPLE)
+ '(SIDE-EFFECT-FREE)
+ '(SIDE-EFFECT-INSENSITIVE)))))
+ '(COERCE-TO-COMPILED-PROCEDURE))
\f
;;;; Compatibility operators
#| -*-Scheme-*-
-$Id: rtlgen.scm,v 1.16 1995/03/13 06:59:28 adams Exp $
+$Id: rtlgen.scm,v 1.17 1995/03/13 23:25:49 adams Exp $
Copyright (c) 1994 Massachusetts Institute of Technology
(define-simple-tag-test '%RECORD? (machine-tag 'RECORD))
(define-simple-tag-test 'STRING? (machine-tag 'STRING))
(define-simple-tag-test 'BIT-STRING? (machine-tag 'VECTOR-1B))
- (define-simple-tag-test 'FLONUM? (machine-tag 'FLONUM)))
+ (define-simple-tag-test 'FLONUM? (machine-tag 'FLONUM))
+ (define-simple-tag-test %compiled-entry? (machine-tag 'COMPILED-ENTRY)))
\f
(define-open-coder/pred 'EQ? 2
(lambda (state rands open-coder)
(rtlgen/assign! tag** `(OBJECT->DATUM ,tag*))
(rtlgen/branch/likely state `(EQ-TEST ,obj* ,tag**))))))))
+
+(define-open-coder/pred %compiled-entry-maximum-arity?
+ (lambda (state rands open-coder)
+ open-coder
+ (let* ((arity (rtlgen/->register (first rands)))
+ (obj (rtlgen/->register (second rands)))
+ (obj* (rtlgen/new-reg))
+ (arity* (rtlgen/new-reg)))
+ (rtlgen/assign! obj* `(OBJECT->ADDRESS ,obj))
+ (rtlgen/assign! arity* `(BYTE-OFFSET ,obj* (MACHINE-CONSTANT -3)))
+ (rtlgen/branch/likely state `(EQ-TEST ,arity* ,arity)))))
+
(define-integrable (rtlgen/constant? syllable)
(and (pair? syllable)
(eq? (car syllable) 'CONSTANT)))