#!/usr/bin/perl use strict; use warnings 'all'; use Config; my $longsize = $Config{longsize}; my $bits = $longsize * 8; sub rshift { # Should be signed/sign-propagating right shift my ($x, $y) = @_; my $mask = 0; my $z = $x >> $y; $mask = (2 ** ($y + 1) -1) << ($bits - $y) if $x < 0; return $z | $mask; }