|
| From: | Richard Henderson |
| Subject: | Re: [Qemu-devel] [RISU RFC PATCH v1 1/7] risugen_common: add insnv, randint_constr, rand_fill |
| Date: | Thu, 27 Jun 2019 10:53:33 +0200 |
| User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 |
On 6/19/19 7:04 AM, Jan Bobek wrote:
> + my $value = ($args{bigendian}
> + ? ($args{value} >> (8 * $args{len} - $bitlen))
> + : $args{value});
...
> + $args{value} >>= $bitlen unless $args{bigendian};
I think this could be clearer without modifying $args.
I mis-read these the first time around.
Perhaps
my $bitpos = 0;
my $bitend = 8 * $args{len};
while ($bitpos < $bitend) {
...
my $value = $args{value} >> ($args{bigendian}
? $bitend - $bitpos - $bitlen
: $bitpos);
...
$bitpos += $bitlen;
}
> +sub randint_constr(%)
> +{
> + my (%args) = @_;
> + my $bitlen = $args{bitlen};
> + my $halfrange = 1 << ($bitlen - 1);
> +
> + while (1) {
> + my $value = int(rand(2 * $halfrange));
> + $value -= $halfrange if defined $args{signed} && $args{signed};
> + $value &= ~$args{fixedbitmask} if defined $args{fixedbitmask};
> + $value |= $args{fixedbits} if defined $args{fixedbits};
> +
> + if (defined $args{constraint}) {
> + if (!($args{constraint} >> 63)) {
> + $value = $args{constraint};
> + } elsif ($value == ~$args{constraint}) {
> + next;
> + }
> + }
I don't understand what you're doing here with {constraint}.
Some additional commentary would help.
r~
| [Prev in Thread] | Current Thread | [Next in Thread] |