-\f
-;;; The loader uses this to convert alien names to the form they need in
-;;; the symbol table (for example, prepending an underscore).
-(defun extern-alien-name (name)
- (declare (type simple-string name))
- ;; OpenBSD is non-ELF, and needs a _ prefix
- #!+openbsd (concatenate 'string "_" name)
- ;; The other (ELF) ports currently don't need any prefix
- #!-openbsd name)
+(defun combination-implementation-style (node)
+ (declare (type sb!c::combination node))
+ (flet ((valid-funtype (args result)
+ (sb!c::valid-fun-use node
+ (sb!c::specifier-type
+ `(function ,args ,result)))))
+ (case (sb!c::combination-fun-source-name node)
+ (logtest
+ (cond
+ ((valid-funtype '(fixnum fixnum) '*)
+ (values :maybe nil))
+ ((valid-funtype '((signed-byte 32) (signed-byte 32)) '*)
+ (values :maybe nil))
+ ((valid-funtype '((unsigned-byte 32) (unsigned-byte 32)) '*)
+ (values :maybe nil))
+ (t (values :default nil))))
+ (logbitp
+ (cond
+ ((and (valid-funtype '((integer 0 29) fixnum) '*)
+ (sb!c::constant-lvar-p (first (sb!c::basic-combination-args node))))
+ (values :transform '(lambda (index integer)
+ (%logbitp integer index))))
+ ((valid-funtype '((integer 0 31) (signed-byte 32)) '*)
+ (values :transform '(lambda (index integer)
+ (%logbitp integer index))))
+ ((valid-funtype '((integer 0 31) (unsigned-byte 32)) '*)
+ (values :transform '(lambda (index integer)
+ (%logbitp integer index))))
+ (t (values :default nil))))
+ (t (values :default nil)))))