ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/jit-amd64-unix.pl
(Generate patch)

Comparing Coro/Coro/jit-amd64-unix.pl (file contents):
Revision 1.3 by root, Sat Jun 11 16:38:38 2011 UTC vs.
Revision 1.4 by root, Mon Jun 13 08:38:16 2011 UTC

48 my $code = "\x48\xbe" . pack "Q", $curbase; # mov imm64, %rsi 48 my $code = "\x48\xbe" . pack "Q", $curbase; # mov imm64, %rsi
49 49
50 my $curslot = 0; 50 my $curslot = 0;
51 51
52 for (@vars) { 52 for (@vars) {
53 my ($addr, $slot, $size) = @$_; 53 my ($addr, $asize, $slot, $ssize) = @$_;
54 54
55 my $slotofs = $slot - $curslot; 55 my $slotofs = $slot - $curslot;
56 56
57 # the sort ensures that this condition and adjustment suffices 57 # the sort ensures that this condition and adjustment suffices
58 if ($slotofs > 127) { 58 if ($slotofs > 127) {
61 $curslot += $adj; 61 $curslot += $adj;
62 $slotofs -= $adj; 62 $slotofs -= $adj;
63 } 63 }
64 64
65 if ($save) { 65 if ($save) {
66 $code .= $mov_ind->($size, $modrm_rsi, 0, $addr - $curbase); 66 $code .= $mov_ind->($asize, $modrm_rsi, 0, $addr - $curbase);
67 $code .= $mov_ind->($size, $modrm_rdi, 1, $slotofs); 67 $code .= $mov_ind->($ssize, $modrm_rdi, 1, $slotofs);
68 } else { 68 } else {
69 $code .= $mov_ind->($size, $modrm_rdi, 0, $slotofs); 69 $code .= $mov_ind->($ssize, $modrm_rdi, 0, $slotofs);
70 $code .= $mov_ind->($size, $modrm_rsi, 1, $addr - $curbase); 70 $code .= $mov_ind->($asize, $modrm_rsi, 1, $addr - $curbase);
71 } 71 }
72 } 72 }
73 73
74 $code .= "\xc3"; # retq 74 $code .= "\xc3"; # retq
75 75
81 81
82 # sort all variables into 256 byte blocks, biased by -128 82 # sort all variables into 256 byte blocks, biased by -128
83 # so gencopy can += 256 occasionally. within those blocks, 83 # so gencopy can += 256 occasionally. within those blocks,
84 # sort by address so we can play further tricks. 84 # sort by address so we can play further tricks.
85 @vars = sort { 85 @vars = sort {
86 (($a->[1] + 128) & ~255) <=> (($b->[1] + 128) & ~255) 86 (($a->[2] + 128) & ~255) <=> (($b->[2] + 128) & ~255)
87 or $a->[0] <=> $b->[0] 87 or $a->[0] <=> $b->[0]
88 } @vars; 88 } @vars;
89 89
90 # we *could* combine adjacent vars, but this is not very common 90 # we *could* combine adjacent vars, but this is not very common
91 91

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines