X-Git-Url: https://git.hcoop.net/bpt/guile.git/blobdiff_plain/ca7b6f6869072a79175c2d2db1b63f706bdf9b25..03cce0ce5fba210e4abd8fa5dfddb04022a27e75:/libguile/vm-i-scheme.c?ds=sidebyside diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c index fc32ec5a8..587aa9566 100644 --- a/libguile/vm-i-scheme.c +++ b/libguile/vm-i-scheme.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2001, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2009, 2010, 2011, 2012, 2013, + * 2014 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -236,10 +237,12 @@ VM_DEFINE_FUNCTION (149, ge, "ge?", 2) #if SCM_GNUC_PREREQ (4, 5) && (defined __x86_64__ || defined __i386__) # undef _CX -# ifdef __x86_64__ +# if SIZEOF_VOID_P == 8 # define _CX "rcx" -# else +# elif SIZEOF_VOID_P == 4 # define _CX "ecx" +# else +# error unsupported word size # endif /* The macros below check the CPU's overflow flag to improve fixnum @@ -503,7 +506,9 @@ VM_DEFINE_FUNCTION (159, ash, "ash", 2) && ((scm_t_bits) (SCM_SRS (nn, (SCM_I_FIXNUM_BIT-1 - bits_to_shift)) + 1) <= 1)) - RETURN (SCM_I_MAKINUM (nn << bits_to_shift)); + RETURN (SCM_I_MAKINUM (nn < 0 + ? -(-nn << bits_to_shift) + : (nn << bits_to_shift))); /* fall through */ } /* fall through */