Fixed up the llss instruction in a7out.
This commit is contained in:
@@ -52,6 +52,7 @@ directory node (dnode) format
|
|||||||
d.i i-number of file
|
d.i i-number of file
|
||||||
d.name four words, space padded
|
d.name four words, space padded
|
||||||
d.uniq i.uniq value of file
|
d.uniq i.uniq value of file
|
||||||
|
two unused words, so 8 words/entry, 8 entries/block
|
||||||
```
|
```
|
||||||
|
|
||||||
i numbers
|
i numbers
|
||||||
|
|||||||
+4
-2
@@ -437,7 +437,7 @@ sub opr {
|
|||||||
$skip = 1
|
$skip = 1
|
||||||
if ( ( $i == 017 )
|
if ( ( $i == 017 )
|
||||||
&& ( $LINK == 0 )
|
&& ( $LINK == 0 )
|
||||||
&& ( $AC != 0 )
|
&& ( $AC < SIGN )
|
||||||
&& ( $AC != 0 ) ); # szl & sna & spa
|
&& ( $AC != 0 ) ); # szl & sna & spa
|
||||||
|
|
||||||
# Clear operations
|
# Clear operations
|
||||||
@@ -558,6 +558,8 @@ sub eae {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( $maskedinstr == 0660600 ) { # llss: long left shift, signed
|
if ( $maskedinstr == 0660600 ) { # llss: long left shift, signed
|
||||||
|
# Set the link to be the AC sign bit
|
||||||
|
$LINK= ($AC & SIGN) ? LINKMASK : 0;
|
||||||
dprintf( "llss AC %06o step %d\n", $AC, $step );
|
dprintf( "llss AC %06o step %d\n", $AC, $step );
|
||||||
foreach my $i ( 1 .. $step ) {
|
foreach my $i ( 1 .. $step ) {
|
||||||
my $MQmsb = ( $MQ & SIGN ) ? 1 : 0;
|
my $MQmsb = ( $MQ & SIGN ) ? 1 : 0;
|
||||||
@@ -572,7 +574,7 @@ sub eae {
|
|||||||
foreach my $i ( 1 .. $step ) {
|
foreach my $i ( 1 .. $step ) {
|
||||||
my $MQmsb = ( $MQ & SIGN ) ? 1 : 0;
|
my $MQmsb = ( $MQ & SIGN ) ? 1 : 0;
|
||||||
$AC = ( ( $AC << 1 ) | $MQmsb ) & MAXINT;
|
$AC = ( ( $AC << 1 ) | $MQmsb ) & MAXINT;
|
||||||
$MQ = ( ( $MQ << 1 ) | ( ($LINK) ? 1 : 0 ) ) & MAXINT; # XXX how to handle unsigned?
|
$MQ = ( ( $MQ << 1 ) | ( ($LINK) ? 1 : 0 ) ) & MAXINT;
|
||||||
}
|
}
|
||||||
$PC++;
|
$PC++;
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user