(define (fxreverse-bit-field v start end) (define (fxreverse-bit-field61 v) ;; Based on . (assert (fx=? (fixnum-width) 61)) (let* (;; Swap pairs of bits (v (fxior (fxarithmetic-shift-right (fxand v #b101010101010101010101010101010101010101010101010101010101010) 1) (fxarithmetic-shift-left (fxand v #b010101010101010101010101010101010101010101010101010101010101) 1))) ;; Swap 2-bit fields (v (fxior (fxarithmetic-shift-right (fxand v #b110011001100110011001100110011001100110011001100110011001100) 2) (fxarithmetic-shift-left (fxand v #b001100110011001100110011001100110011001100110011001100110011) 2))) ;; Swap 4-bit fields (tmp1 (fxarithmetic-shift-right (fxand v #b111100000000000000000000000000000000000000000000000000000000) 56)) (v (fxior (fxarithmetic-shift-right (fxand v #b000011110000111100001111000011110000111100001111000011110000) 4) (fxarithmetic-shift-left (fxand v #b000000001111000011110000111100001111000011110000111100001111) 4))) ;; Swap bytes (tmp2 (fxarithmetic-shift-right (fxand v #b000011111111000000000000000000000000000000000000000000000000) 44)) (v (fxior (fxarithmetic-shift-right (fxand v #b111100000000111111110000000011111111000000001111111100000000) 8) (fxarithmetic-shift-left (fxand v #b000000000000000000001111111100000000111111110000000011111111) 8))) ;; Swap 16-bit fields (tmp3 (fxarithmetic-shift-right (fxand v #b000000000000111111111111111100000000000000000000000000000000) 20)) (v (fxior (fxarithmetic-shift-right (fxand v #b111111111111000000000000000011111111111111110000000000000000) 16) (fxarithmetic-shift-left (fxand v #b000000000000000000000000000000000000000000001111111111111111) 16))) ;; Swap 28-bit fields (v (fxior (fxarithmetic-shift-right (fxand v #b111111111111111111111111111100000000000000000000000000000000) 28) (fxarithmetic-shift-left (fxand v #b000000000000000000000000000011111111111111111111111111111111) 28)))) (fxior tmp1 tmp2 tmp3 v))) (define (fxreverse-bit-field30 v) (assert (fx=? (fixnum-width) 30)) (let* (;; Swap pairs of bits (tmp1 (fxarithmetic-shift-right (fxand v #b10000000000000000000000000000) 28)) (v (fxior (fxarithmetic-shift-right (fxand v #b01010101010101010101010101010) 1) (fxarithmetic-shift-left (fxand v #b00101010101010101010101010101) 1))) ;; Swap 2-bit fields (v (fxior (fxarithmetic-shift-right (fxand v #b01100110011001100110011001100) 2) (fxarithmetic-shift-left (fxand v #b00011001100110011001100110011) 2))) ;; Swap 4-bit fields (tmp2 (fxarithmetic-shift-right (fxand v #b01111000000000000000000000000) 23)) (v (fxior (fxarithmetic-shift-right (fxand v #b10000111100001111000011110000) 4) (fxarithmetic-shift-left (fxand v #b00000000011110000111100001111) 4))) ;; Swap bytes (tmp3 (fxarithmetic-shift-right (fxand v #b00000111111110000000000000000) 11)) (v (fxior (fxarithmetic-shift-right (fxand v #b11111000000001111111100000000) 8) (fxarithmetic-shift-left (fxand v #b00000000000000000000011111111) 8))) ;; Swap 13-bit fields (v (fxior (fxarithmetic-shift-right (fxand v #b11111111111110000000000000000) 13) (fxarithmetic-shift-left (fxand v #b00000000000001111111111111111) 13)))) (fxior tmp1 tmp2 tmp3 v))) (assert (fx