form for it (opcode length 1, opcode 0, rather than opcode length 0).
svn path=/trunk/yasm/; revision=518
intnum *intn;
floatnum *flt;
symrec *sym;
- unsigned char groupdata[4];
+ unsigned char groupdata[5];
effaddr *ea;
expr *exp;
immval *im_val;
die "Invalid Address Size\n"
if $size !~ m/^(nil|16|32|\$0\.\d)$/oi;
die "Invalid Short Opcode\n"
- if $shortopcode !~ m/^(nil|(?:$valid_opcodes)(,(?:$valid_opcodes)){0,2}(\+(\$\d|\$0\.\d|\d))?)$/oi;
+ if $shortopcode !~ m/^(\$0\.\d\?)?(nil|(?:$valid_opcodes)(,(?:$valid_opcodes)){0,2}(\+(\$\d|\$0\.\d|\d))?)$/oi;
die "Invalid Near Opcode\n"
if $nearopcode !~ m/^(nil|(?:$valid_opcodes)(,(?:$valid_opcodes)){0,2}(\+(\$\d|\$0\.\d|\d))?)$/oi;
die "Invalid Short CPU\n"
}
else
{
- # opcode piece 1 (and 2 and 3 if attached)
- my @opcodes = split ",", $inst->[SHORTOPCODE];
- # number of bytes of short opcode
- push @args, "short_op_len=".@opcodes.";";
+ my @opcodes;
+ print $inst->[SHORTOPCODE]."\n";
+ # Check for possible length parameter
+ if($inst->[SHORTOPCODE] =~ m/\?/)
+ {
+ my @pieces = split /\?/, $inst->[SHORTOPCODE];
+ push @args, "short_op_len=".$pieces[0].";";
+ # opcode piece 1 (and 2 and 3 if attached)
+ @opcodes = split ",", $pieces[1];
+ }
+ else
+ {
+ # opcode piece 1 (and 2 and 3 if attached)
+ @opcodes = split ",", $inst->[SHORTOPCODE];
+ # number of bytes of short opcode
+ push @args, "short_op_len=".@opcodes.";";
+ }
for (my $i=0; $i < @opcodes; ++$i)
{
$opcodes[$i] =~ s/([0-9A-Fa-f]{2})/0x$1/g;
intnum *intn;
floatnum *flt;
symrec *sym;
- unsigned char groupdata[4];
+ unsigned char groupdata[5];
effaddr *ea;
expr *exp;
immval *im_val;
intnum *intn;
floatnum *flt;
symrec *sym;
- unsigned char groupdata[4];
+ unsigned char groupdata[5];
effaddr *ea;
expr *exp;
immval *im_val;
die "Invalid Address Size\n"
if $size !~ m/^(nil|16|32|\$0\.\d)$/oi;
die "Invalid Short Opcode\n"
- if $shortopcode !~ m/^(nil|(?:$valid_opcodes)(,(?:$valid_opcodes)){0,2}(\+(\$\d|\$0\.\d|\d))?)$/oi;
+ if $shortopcode !~ m/^(\$0\.\d\?)?(nil|(?:$valid_opcodes)(,(?:$valid_opcodes)){0,2}(\+(\$\d|\$0\.\d|\d))?)$/oi;
die "Invalid Near Opcode\n"
if $nearopcode !~ m/^(nil|(?:$valid_opcodes)(,(?:$valid_opcodes)){0,2}(\+(\$\d|\$0\.\d|\d))?)$/oi;
die "Invalid Short CPU\n"
}
else
{
- # opcode piece 1 (and 2 and 3 if attached)
- my @opcodes = split ",", $inst->[SHORTOPCODE];
- # number of bytes of short opcode
- push @args, "short_op_len=".@opcodes.";";
+ my @opcodes;
+ print $inst->[SHORTOPCODE]."\n";
+ # Check for possible length parameter
+ if($inst->[SHORTOPCODE] =~ m/\?/)
+ {
+ my @pieces = split /\?/, $inst->[SHORTOPCODE];
+ push @args, "short_op_len=".$pieces[0].";";
+ # opcode piece 1 (and 2 and 3 if attached)
+ @opcodes = split ",", $pieces[1];
+ }
+ else
+ {
+ # opcode piece 1 (and 2 and 3 if attached)
+ @opcodes = split ",", $inst->[SHORTOPCODE];
+ # number of bytes of short opcode
+ push @args, "short_op_len=".@opcodes.";";
+ }
for (my $i=0; $i < @opcodes; ++$i)
{
$opcodes[$i] =~ s/([0-9A-Fa-f]{2})/0x$1/g;
intnum *intn;
floatnum *flt;
symrec *sym;
- unsigned char groupdata[4];
+ unsigned char groupdata[5];
effaddr *ea;
expr *exp;
immval *im_val;