#!/usr/bin/perl # # Generate a FC structure ckecking program. # use strict; use warnings; my $fc = shift @ARGV; print <) { chomp; /^([A-Za-z_0-9()]*)\t(\d+)(?:\t([][a-z_0-9]+))?$/ or die; my $name = $1; my $size = $2; my $field = defined $3 ? $3 : $name; $field = lc $field; $field =~ y/()//d; if ($name eq '') { print " /* Skip $size bits. */\n"; } else { print " /* Read $name. */\n"; if ($size == 32) { print " var = fc->words[" . int ($offset / 32) . "] >> " . $offset % 32 . ";\n"; } else { print " var = (fc->words[" . int ($offset / 32) . "] >> " . $offset % 32 . ") & ((1 << $size) - 1);\n"; } print " test_fail_unless (var == fc->$fc.$field);\n"; } $offset += $size; } $offset == 128 or die "$ARGV"; print <