#| -*-Scheme-*-
-$Id: machin.scm,v 1.9 1992/11/18 03:52:14 gjr Exp $
+$Id: machin.scm,v 1.10 1992/12/22 02:17:06 cph Exp $
Copyright (c) 1988-1992 Massachusetts Institute of Technology
3)))
((MACHINE-CONSTANT)
(if-integer (rtl:machine-constant-value expression)))
- ((ENTRY:PROCEDURE
- ENTRY:CONTINUATION
- ASSIGNMENT-CACHE
- VARIABLE-CACHE
- OFFSET-ADDRESS)
+ ((ENTRY:PROCEDURE ENTRY:CONTINUATION ASSIGNMENT-CACHE VARIABLE-CACHE
+ OFFSET-ADDRESS)
3)
((CONS-NON-POINTER)
(and (rtl:machine-constant? (rtl:cons-non-pointer-type expression))
true)
(define compiler:primitives-with-no-open-coding
- '(DIVIDE-FIXNUM GCD-FIXNUM FIXNUM-QUOTIENT FIXNUM-REMAINDER
- FIXNUM-NOT FIXNUM-AND FIXNUM-ANDC FIXNUM-OR FIXNUM-XOR FIXNUM-LSH
+ '(DIVIDE-FIXNUM GCD-FIXNUM FIXNUM-QUOTIENT FIXNUM-REMAINDER FIXNUM-LSH
INTEGER-QUOTIENT INTEGER-REMAINDER &/ QUOTIENT REMAINDER
FLONUM-SIN FLONUM-COS FLONUM-TAN FLONUM-ASIN FLONUM-ACOS
FLONUM-ATAN FLONUM-EXP FLONUM-LOG FLONUM-TRUNCATE FLONUM-ROUND
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/mips/rulfix.scm,v 1.6 1992/08/20 01:28:14 jinx Exp $
+$Id: rulfix.scm,v 1.7 1992/12/22 02:20:45 cph Exp $
Copyright (c) 1989-1992 Massachusetts Institute of Technology
(BLTZ ,tgt (@PCR ,if-no-overflow))
(NOP)))))))
(LAP)))))
+
+(define-arithmetic-method 'FIXNUM-NOT fixnum-methods/1-arg
+ (lambda (tgt src overflow?)
+ overflow?
+ (LAP (NOR ,tgt 0 ,src))))
\f
(define-rule statement
;; execute a binary fixnum operation
(MFLO ,tgt)))
(define-arithmetic-method 'MULTIPLY-FIXNUM fixnum-methods/2-args do-multiply)
+
+(define-arithmetic-method 'FIXNUM-AND fixnum-methods/2-args
+ (lambda (tgt src1 src2 overflow?)
+ overflow?
+ (LAP (AND ,tgt ,src1 ,src2))))
+
+(define-arithmetic-method 'FIXNUM-ANDC fixnum-methods/2-args
+ (lambda (tgt src1 src2 overflow?)
+ overflow?
+ (LAP (NOR ,regnum:assembler-temp 0 ,src2)
+ (AND ,tgt ,src1 ,regnum:assembler-temp))))
+
+(define-arithmetic-method 'FIXNUM-OR fixnum-methods/2-args
+ (lambda (tgt src1 src2 overflow?)
+ overflow?
+ (LAP (OR ,tgt ,src1 ,src2))))
+
+(define-arithmetic-method 'FIXNUM-XOR fixnum-methods/2-args
+ (lambda (tgt src1 src2 overflow?)
+ overflow?
+ (LAP (XOR ,tgt ,src1 ,src2))))
\f
(define-rule statement
;; execute binary fixnum operation with constant second arg
target constant source overflow?)))))
(define (fixnum-2-args/commutative? operator)
- (memq operator '(PLUS-FIXNUM MULTIPLY-FIXNUM)))
+ (memq operator
+ '(PLUS-FIXNUM MULTIPLY-FIXNUM FIXNUM-AND FIXNUM-OR FIXNUM-XOR)))
(define (fixnum-2-args/operator/register*constant operation)
(lookup-arithmetic-method operation fixnum-methods/2-args/register*constant))