I think the right thing is to define 'ash-left-modfx' for all targets, and have 'cross-modular' moved up in 'build-order.lisp-expr' so that for both host and target the expression can be (ash-left-modfx val shift)

I've got some tools to help ensure that playing leapfrog/musical-chairs with files in a build order list doesn't mess things up in terms of an inline function that used to work but now it doesn't because it wasn't defined until after it was first called etc.  I'd feel much more comfortable rearranging things once I give that utility a crack at the SBCL sources. Unless somebody is willing to say sure, just move cross-modular earlier, and also remove the reader conditionals from numbers.lisp

On Sun, Mar 16, 2014 at 11:30 PM, Stas Boukarev <stassats@gmail.com> wrote:
Douglas Katzman <dougk@google.com> writes:

> I've already run through all tests the solution which is slightly less
> displeasing to me - always use the expression that I had for '#+sb-xc-host'
> and remove the
> #-sb-xc-host case.  But leave the straightforward call to ash on 64-bit
> platform.
Portable-portable and fast-fast:

(declaim (inline make-info-descriptor))
(defun make-info-descriptor (value position)
  (declare (type type-number value)
           (type (mod #.+infos-per-word+) position))
  (let ((x (ash value position)))
    (logior x (- (mask-field (byte 1 sb!vm:n-fixnum-bits) x)))))

With best regards, Stas.