Branch Coverage

blib/lib/CPU/x86_64/InstructionWriter.pm
Criterion Covered Total %
branch 300 426 70.4


line true false branch
100 57629 0 !(@_ & 1) ? :
0 57629 @_ == 1 && ref $_[0] eq 'HASH' ? :
115 0 272 if @_ > 1
116 0 0 if @_ > 1
117 0 57651 if @_ > 1
118 0 58064 if @_ > 1
122 0 257 if @_ > 1
125 0 0 unless @_ > 1
134 5 252 if defined $name and ord $name == 46
135 80 177 unless (defined $name and defined $labels->{$name})
146 0 69 unless @_ == 2
150 0 69 unless defined $_[1]
155 69 0 unless ref $label
159 0 69 if defined $label->offset
187 1 1 ord $name == 46 ? :
191 0 0 if defined $self_label->offset and defined $peer_label->offset and $self_label->relative_to != $peer_label->relative_to
195 1 1 if defined $self_label->offset and $peer_label->relative_to == $peer->start_address
203 2 0 $_->can('clone_into_writer') ? :
1 2 exists $label_map{$_} ? :
210 0 1 if $bytes & $bytes - 1
217 0 4 unless length $fill == 1
232 3 1 if (ref $_[1] eq 'HASH') { }
239 0 9 if defined $label->{'offset'}
242 6 3 if ($ofs < 0)
272 3 0 if (ref $str eq 'HASH') { }
276 6 3 if $nul_terminate
282 0 0 if $nul_terminate
302 2810 166 $reg & 4096 ? :
2976 0 defined($reg = $regnum{$_}) ? :
0 2976 ref $_ && ref($_)->can('value') ? :
2588 2976 ref $_ eq 'ARRAY' ? :
10 5564 &looks_like_number($_) ? :
304 2976 2598 if defined $reg
306 0 2830 unless defined $bits
333 35 82 defined $_[1] ? :
338 0 0 defined $_[1] ? :
344 0 2 unless @_ == 2
345 0 2 unless defined $_[1]
349 2 0 unless ref $label
355 0 2 unless defined $params->{'target'}{'offset'}
357 0 2 unless $ofs >> 31 == $ofs >> 31 >> 1
367 0 0 ref $immed ? :
368 0 0 if ref $immed
379 2 1 if ($pop_bytes) { }
380 0 2 ref $pop_bytes ? :
381 0 2 if ref $pop_bytes
398 0 180 unless defined $params->target->offset
403 85 0 defined $params->{'long_op'} ? :
95 85 $short ? :
408 0 78 unless @_ == 4
410 0 78 unless defined $_[3]
411 0 78 ref $label ? :
420 0 4 unless @_ == 2
528 16 169 if (CORE::not defined $mem->[0] and $mem->[1] and CORE::not defined $mem->[2] and $mem->[1] > 2147483647 || ref $mem->[1])
530 4 4 $bits == 16 ? :
4 8 $bits == 32 ? :
4 12 $bits == 64 ? :
16 0 if (lc $reg eq ($bits == 64 ? "rax" : ($bits == 32 ? "eax" : ($bits == 16 ? "ax" : "al"))))
532 4 12 if $bits == 64
533 4 12 if $bits == 16
535 8 8 &looks_like_number($disp) ? :
536 8 8 if (CORE::not defined $val) { }
541 0 14 unless defined $v
542 2 6 $bits == 16 ? :
2 6 $bits == 64 ? :
6 8 $v > 2147483647 ? :
554 898 2690 if $bits == 64
555 898 1792 if $bits == 32
556 896 896 if $bits == 16
557 896 0 if $bits == 8
571 28 35 if ($immed >> 31 >> 1 == 0) { }
21 14 elsif ($immed >> 31 == -1) { }
572 12 16 $reg & 8 ? :
588 24 33 if $reg & 8
596 21 28 if $reg & 8
604 25 30 if ($reg & 32)
809 96 636 $immed eq 1 ? :
811 147 165 $bits == 16 ? :
189 312 $bits == 32 ? :
231 501 if ($bits == 64) { }
817 636 96 unless ($immed eq 1)
818 0 636 ref $immed ? :
819 0 636 if ref $immed
833 756 3024 $immed eq 1 ? :
834 945 2835 $bits == 16 ? :
945 2835 $bits == 64 ? :
837 3024 756 unless ($immed eq 1)
838 0 3024 ref $immed ? :
839 0 3024 if ref $immed
1106 6 9 $reg & 8 ? :
1113 0 16 ref $imm ? :
1114 12 4 $val >> 7 == $val >> 8 ? :
1115 0 16 if ref $imm
1129 6 8 $reg & 8 ? :
1139 28 0 if (CORE::not ref $varspace || ref $nesting) { }
1143 0 0 ref $varspace ? :
1144 0 0 if ref $varspace
1146 0 0 ref $nesting ? :
1147 0 0 if ref $nesting
1251 4 655 if @_ == 1
1272 0 1468 defined $immed ? :
0 529 defined $immed ? :
1468 529 $rex ? :
1334 480 152 if ($uses_extended_reg) { }
1335 0 480 if $uses_high_byte
1350 27 48 !$rex ? :
1358 70 70 if (defined(my $regid = $regnum64{$reg})) { }
70 0 elsif (defined($regid = $regnum32{$reg})) { }
1368 24 116 !$rex ? :
1388 7514 0 if defined $reg
1395 7513 0 if defined $reg
1402 7511 0 if defined $reg
1411 5050 2020 if $regnum & 32
1413 0 7070 if ($regnum & 16)
1416 0 0 if $rex or ($regnum64{$base_reg // ""} // 0) & 8 or ($regnum64{$index_reg // ""} // 0) & 8
1424 29281 9250 if defined $index_reg
1427 29380 9151 if (defined $base_reg)
1429 97 29283 if ($base_reg & 64 and ref $disp)
1430 97 0 defined $$disp ? :
97 0 if ref $disp eq "SCALAR"
1435 11583 26948 if defined $prefix
1437 0 38531 if defined $rip
1451 48 15 if defined $base_reg
1453 48 15 if defined $index_reg
1455 0 63 ref $disp ? :
63 0 defined $disp ? :
1460 48 15 if defined $base_reg
1462 48 15 if defined $index_reg
1465 0 63 ref $disp ? :
63 0 defined $disp ? :
1470 48 15 if defined $base_reg
1472 48 15 if defined $index_reg
1474 0 63 ref $disp ? :
63 0 defined $disp ? :
1479 48 15 if defined $base_reg
1481 48 15 if defined $index_reg
1483 0 63 ref $disp ? :
63 0 defined $disp ? :
1499 50385 2600 $opcode <= 255 ? :
1501 40406 12579 if (defined $base_reg) { }
1502 179 40227 if ($base_reg == 2117)
1503 0 179 unless defined $disp
1504 0 179 if defined $scale or defined $immed
1505 91 88 $rex ? :
1511 3352 6706 ($base_reg & 7) == 5 ? :
10056 0 $disp >> 31 == $disp >> 31 >> 1 ? :
20113 10056 $disp >> 7 == $disp >> 8 ? :
10058 30169 !$disp ? :
1516 30169 10058 if (defined $index_reg) { }
3352 6706 elsif (($base_reg & 7) == 4) { }
1518 0 30169 unless $index_reg != 4
1533 0 12579 unless $disp >> 31 == $disp >> 31 >> 1
1536 10056 2523 if (defined $index_reg) { }
1538 0 10056 if ($index_reg & 15) == 4
1548 4284 48522 if defined $immed
1551 32494 20312 $rex ? :
1587 132 22 $reg & 15 ? :
154 0 $value >> 31 == $value >> 31 >> 1 ? :
295 154 if (defined $opcode8 and $value >> 7 == $value >> 8) { }
1611 126 168 $rex ? :
66 22 $reg & 15 ? :
66 88 $rex ? :
154 0 $value >> 31 >> 1 == $value >> 31 >> 2 ? :
294 154 if (defined $opcode8 and $value >> 7 == $value >> 8 || $value >> 8 == 16777215) { }
1637 105 140 $rex ? :
63 21 $reg & 15 ? :
63 84 $rex ? :
147 0 $value >> 16 == $value >> 17 ? :
245 147 if (defined $opcode8 and $value >> 7 == $value >> 8 || $value >> 8 == 255) { }
1666 0 280 ref $immed ? :
1667 0 280 unless $value >> 8 == $value >> 9
1668 0 280 if ($reg & 16) { }
40 240 elsif (CORE::not $reg & 15) { }
200 40 elsif ($reg & 32) { }
1677 0 280 if ref $immed
1685 3072 960 if defined $base_reg
1687 3072 960 if defined $index_reg
1689 4032 0 defined $disp ? :
1694 1386 0 $value >> 31 == $value >> 31 >> 1 ? :
2646 1386 if (defined $opcode8 and $value >> 7 == $value >> 8) { }
1704 3072 960 if defined $base_reg
1706 3072 960 if defined $index_reg
1708 4032 0 defined $disp ? :
1713 1386 0 $value >> 30 >> 2 == $value >> 30 >> 3 ? :
2646 1386 if (defined $opcode8 and $value >> 7 == $value >> 8 || $value >> 8 == 16777215) { }
1723 2688 840 if defined $base_reg
1725 2688 840 if defined $index_reg
1728 3528 0 defined $disp ? :
1733 1323 0 $value >> 16 == $value >> 17 ? :
2205 1323 if (defined $opcode8 and $value >> 7 == $value >> 8 || $value >> 8 == 255) { }
1743 1920 600 if defined $base_reg
1745 1920 600 if defined $index_reg
1747 2520 0 defined $disp ? :
1752 0 2520 unless $value >> 8 == $value >> 9
1759 97 54311 if (ref $u and CORE::not &looks_like_number($u)) { }
1760 0 0 defined $$u ? :
0 97 if ref $u eq "SCALAR"
1762 0 97 unless ref($u)->can("value")
1777 97 0 if $u->can("instruction")
1809 0 189 if ($location < 0) { }
1819 3 186 if ($self->{'debug'})
1823 3 8 if $caller[0] ne __PACKAGE__
1838 0 0 unless defined $v
1840 0 0 $bits <= 64 ? :
0 0 $bits <= 32 ? :
0 0 $bits <= 16 ? :
0 0 $bits <= 8 ? :
1841 0 0 unless $bits == 64 or $v >> $bits == $v >> $bits + 1
1866 93 452 if $ofs
1869 150 395 unless my $fn = $p->can('encoder') && $p->encoder
1878 80 315 if (length $enc != $p->{'len'})
1885 0 395 unless (eval { do { my $enc = $self->$fn($p); substr($self->{'_buf'}, $p->{'offset'}, $p->{'len'}) = $enc; if (length $enc != $p->{'len'}) { $changed_len = 1; $ofs += length($enc) - $p->{'len'}; $p->{'len'} = length $enc; } ; 1 } })
1886 0 0 if (my $caller = $p->caller) { }