Title: [99917] trunk
Revision
99917
Author
[email protected]
Date
2011-11-10 17:07:44 -0800 (Thu, 10 Nov 2011)

Log Message

DFG byte array support sometimes clamps values incorrectly
https://bugs.webkit.org/show_bug.cgi?id=71975

Source/_javascript_Core: 

Reviewed by Oliver Hunt.

* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):

LayoutTests: 

Reviewed by Oliver Hunt.
        
Added a test for byte arrays, and fixed a small bug in dfg-min-max.js.

* fast/js/dfg-byte-array-put-expected.txt: Added.
* fast/js/dfg-byte-array-put.html: Added.
* fast/js/script-tests/dfg-byte-array-put.js: Added.
(doPut):
(doGet):
* fast/js/script-tests/dfg-min-max.js:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (99916 => 99917)


--- trunk/LayoutTests/ChangeLog	2011-11-11 00:50:58 UTC (rev 99916)
+++ trunk/LayoutTests/ChangeLog	2011-11-11 01:07:44 UTC (rev 99917)
@@ -1,3 +1,19 @@
+2011-11-10  Filip Pizlo  <[email protected]>
+
+        DFG byte array support sometimes clamps values incorrectly
+        https://bugs.webkit.org/show_bug.cgi?id=71975
+
+        Reviewed by Oliver Hunt.
+        
+        Added a test for byte arrays, and fixed a small bug in dfg-min-max.js.
+
+        * fast/js/dfg-byte-array-put-expected.txt: Added.
+        * fast/js/dfg-byte-array-put.html: Added.
+        * fast/js/script-tests/dfg-byte-array-put.js: Added.
+        (doPut):
+        (doGet):
+        * fast/js/script-tests/dfg-min-max.js:
+
 2011-11-10  Hayato Ito  <[email protected]>
 
         Unreviewed, revert a misplaced expected text in r99819.

Added: trunk/LayoutTests/fast/js/dfg-byte-array-put-expected.txt (0 => 99917)


--- trunk/LayoutTests/fast/js/dfg-byte-array-put-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/js/dfg-byte-array-put-expected.txt	2011-11-11 01:07:44 UTC (rev 99917)
@@ -0,0 +1,1009 @@
+This tests that the DFG JIT's optimizations for byte arrays work as expected.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS doGet(data, 0) is 0
+PASS doGet(data, 1) is 0
+PASS doGet(data, 2) is 0
+PASS doGet(data, 3) is 0
+PASS doGet(data, 4) is 0
+PASS doGet(data, 5) is 0
+PASS doGet(data, 6) is 0
+PASS doGet(data, 7) is 0
+PASS doGet(data, 8) is 0
+PASS doGet(data, 9) is 0
+PASS doGet(data, 10) is 0
+PASS doGet(data, 11) is 0
+PASS doGet(data, 12) is 0
+PASS doGet(data, 13) is 0
+PASS doGet(data, 14) is 0
+PASS doGet(data, 15) is 0
+PASS doGet(data, 16) is 0
+PASS doGet(data, 17) is 0
+PASS doGet(data, 18) is 0
+PASS doGet(data, 19) is 0
+PASS doGet(data, 20) is 0
+PASS doGet(data, 21) is 0
+PASS doGet(data, 22) is 0
+PASS doGet(data, 23) is 0
+PASS doGet(data, 24) is 0
+PASS doGet(data, 25) is 0
+PASS doGet(data, 26) is 0
+PASS doGet(data, 27) is 0
+PASS doGet(data, 28) is 0
+PASS doGet(data, 29) is 0
+PASS doGet(data, 30) is 0
+PASS doGet(data, 31) is 0
+PASS doGet(data, 32) is 0
+PASS doGet(data, 33) is 0
+PASS doGet(data, 34) is 0
+PASS doGet(data, 35) is 0
+PASS doGet(data, 36) is 0
+PASS doGet(data, 37) is 0
+PASS doGet(data, 38) is 0
+PASS doGet(data, 39) is 0
+PASS doGet(data, 40) is 0
+PASS doGet(data, 41) is 0
+PASS doGet(data, 42) is 0
+PASS doGet(data, 43) is 0
+PASS doGet(data, 44) is 0
+PASS doGet(data, 45) is 0
+PASS doGet(data, 46) is 0
+PASS doGet(data, 47) is 0
+PASS doGet(data, 48) is 0
+PASS doGet(data, 49) is 0
+PASS doGet(data, 50) is 0
+PASS doGet(data, 51) is 0
+PASS doGet(data, 52) is 0
+PASS doGet(data, 53) is 0
+PASS doGet(data, 54) is 0
+PASS doGet(data, 55) is 0
+PASS doGet(data, 56) is 0
+PASS doGet(data, 57) is 0
+PASS doGet(data, 58) is 0
+PASS doGet(data, 59) is 0
+PASS doGet(data, 60) is 0
+PASS doGet(data, 61) is 0
+PASS doGet(data, 62) is 0
+PASS doGet(data, 63) is 0
+PASS doGet(data, 64) is 0
+PASS doGet(data, 65) is 0
+PASS doGet(data, 66) is 0
+PASS doGet(data, 67) is 0
+PASS doGet(data, 68) is 0
+PASS doGet(data, 69) is 0
+PASS doGet(data, 70) is 0
+PASS doGet(data, 71) is 0
+PASS doGet(data, 72) is 0
+PASS doGet(data, 73) is 0
+PASS doGet(data, 74) is 0
+PASS doGet(data, 75) is 0
+PASS doGet(data, 76) is 0
+PASS doGet(data, 77) is 0
+PASS doGet(data, 78) is 0
+PASS doGet(data, 79) is 0
+PASS doGet(data, 80) is 0
+PASS doGet(data, 81) is 0
+PASS doGet(data, 82) is 0
+PASS doGet(data, 83) is 0
+PASS doGet(data, 84) is 0
+PASS doGet(data, 85) is 0
+PASS doGet(data, 86) is 0
+PASS doGet(data, 87) is 0
+PASS doGet(data, 88) is 0
+PASS doGet(data, 89) is 0
+PASS doGet(data, 90) is 0
+PASS doGet(data, 91) is 0
+PASS doGet(data, 92) is 0
+PASS doGet(data, 93) is 0
+PASS doGet(data, 94) is 0
+PASS doGet(data, 95) is 0
+PASS doGet(data, 96) is 0
+PASS doGet(data, 97) is 0
+PASS doGet(data, 98) is 0
+PASS doGet(data, 99) is 0
+PASS doGet(data, 0) is 0
+PASS doGet(data, 1) is 1
+PASS doGet(data, 2) is 2
+PASS doGet(data, 3) is 3
+PASS doGet(data, 4) is 4
+PASS doGet(data, 5) is 5
+PASS doGet(data, 6) is 6
+PASS doGet(data, 7) is 7
+PASS doGet(data, 8) is 8
+PASS doGet(data, 9) is 9
+PASS doGet(data, 10) is 10
+PASS doGet(data, 11) is 11
+PASS doGet(data, 12) is 12
+PASS doGet(data, 13) is 13
+PASS doGet(data, 14) is 14
+PASS doGet(data, 15) is 15
+PASS doGet(data, 16) is 16
+PASS doGet(data, 17) is 17
+PASS doGet(data, 18) is 18
+PASS doGet(data, 19) is 19
+PASS doGet(data, 20) is 20
+PASS doGet(data, 21) is 21
+PASS doGet(data, 22) is 22
+PASS doGet(data, 23) is 23
+PASS doGet(data, 24) is 24
+PASS doGet(data, 25) is 25
+PASS doGet(data, 26) is 26
+PASS doGet(data, 27) is 27
+PASS doGet(data, 28) is 28
+PASS doGet(data, 29) is 29
+PASS doGet(data, 30) is 30
+PASS doGet(data, 31) is 31
+PASS doGet(data, 32) is 32
+PASS doGet(data, 33) is 33
+PASS doGet(data, 34) is 34
+PASS doGet(data, 35) is 35
+PASS doGet(data, 36) is 36
+PASS doGet(data, 37) is 37
+PASS doGet(data, 38) is 38
+PASS doGet(data, 39) is 39
+PASS doGet(data, 40) is 40
+PASS doGet(data, 41) is 41
+PASS doGet(data, 42) is 42
+PASS doGet(data, 43) is 43
+PASS doGet(data, 44) is 44
+PASS doGet(data, 45) is 45
+PASS doGet(data, 46) is 46
+PASS doGet(data, 47) is 47
+PASS doGet(data, 48) is 48
+PASS doGet(data, 49) is 49
+PASS doGet(data, 50) is 50
+PASS doGet(data, 51) is 51
+PASS doGet(data, 52) is 52
+PASS doGet(data, 53) is 53
+PASS doGet(data, 54) is 54
+PASS doGet(data, 55) is 55
+PASS doGet(data, 56) is 56
+PASS doGet(data, 57) is 57
+PASS doGet(data, 58) is 58
+PASS doGet(data, 59) is 59
+PASS doGet(data, 60) is 60
+PASS doGet(data, 61) is 61
+PASS doGet(data, 62) is 62
+PASS doGet(data, 63) is 63
+PASS doGet(data, 64) is 64
+PASS doGet(data, 65) is 65
+PASS doGet(data, 66) is 66
+PASS doGet(data, 67) is 67
+PASS doGet(data, 68) is 68
+PASS doGet(data, 69) is 69
+PASS doGet(data, 70) is 70
+PASS doGet(data, 71) is 71
+PASS doGet(data, 72) is 72
+PASS doGet(data, 73) is 73
+PASS doGet(data, 74) is 74
+PASS doGet(data, 75) is 75
+PASS doGet(data, 76) is 76
+PASS doGet(data, 77) is 77
+PASS doGet(data, 78) is 78
+PASS doGet(data, 79) is 79
+PASS doGet(data, 80) is 80
+PASS doGet(data, 81) is 81
+PASS doGet(data, 82) is 82
+PASS doGet(data, 83) is 83
+PASS doGet(data, 84) is 84
+PASS doGet(data, 85) is 85
+PASS doGet(data, 86) is 86
+PASS doGet(data, 87) is 87
+PASS doGet(data, 88) is 88
+PASS doGet(data, 89) is 89
+PASS doGet(data, 90) is 90
+PASS doGet(data, 91) is 91
+PASS doGet(data, 92) is 92
+PASS doGet(data, 93) is 93
+PASS doGet(data, 94) is 94
+PASS doGet(data, 95) is 95
+PASS doGet(data, 96) is 96
+PASS doGet(data, 97) is 97
+PASS doGet(data, 98) is 98
+PASS doGet(data, 99) is 99
+PASS doGet(data, 0) is 100
+PASS doGet(data, 1) is 101
+PASS doGet(data, 2) is 102
+PASS doGet(data, 3) is 103
+PASS doGet(data, 4) is 104
+PASS doGet(data, 5) is 105
+PASS doGet(data, 6) is 106
+PASS doGet(data, 7) is 107
+PASS doGet(data, 8) is 108
+PASS doGet(data, 9) is 109
+PASS doGet(data, 10) is 110
+PASS doGet(data, 11) is 111
+PASS doGet(data, 12) is 112
+PASS doGet(data, 13) is 113
+PASS doGet(data, 14) is 114
+PASS doGet(data, 15) is 115
+PASS doGet(data, 16) is 116
+PASS doGet(data, 17) is 117
+PASS doGet(data, 18) is 118
+PASS doGet(data, 19) is 119
+PASS doGet(data, 20) is 120
+PASS doGet(data, 21) is 121
+PASS doGet(data, 22) is 122
+PASS doGet(data, 23) is 123
+PASS doGet(data, 24) is 124
+PASS doGet(data, 25) is 125
+PASS doGet(data, 26) is 126
+PASS doGet(data, 27) is 127
+PASS doGet(data, 28) is 128
+PASS doGet(data, 29) is 129
+PASS doGet(data, 30) is 130
+PASS doGet(data, 31) is 131
+PASS doGet(data, 32) is 132
+PASS doGet(data, 33) is 133
+PASS doGet(data, 34) is 134
+PASS doGet(data, 35) is 135
+PASS doGet(data, 36) is 136
+PASS doGet(data, 37) is 137
+PASS doGet(data, 38) is 138
+PASS doGet(data, 39) is 139
+PASS doGet(data, 40) is 140
+PASS doGet(data, 41) is 141
+PASS doGet(data, 42) is 142
+PASS doGet(data, 43) is 143
+PASS doGet(data, 44) is 144
+PASS doGet(data, 45) is 145
+PASS doGet(data, 46) is 146
+PASS doGet(data, 47) is 147
+PASS doGet(data, 48) is 148
+PASS doGet(data, 49) is 149
+PASS doGet(data, 50) is 150
+PASS doGet(data, 51) is 151
+PASS doGet(data, 52) is 152
+PASS doGet(data, 53) is 153
+PASS doGet(data, 54) is 154
+PASS doGet(data, 55) is 155
+PASS doGet(data, 56) is 156
+PASS doGet(data, 57) is 157
+PASS doGet(data, 58) is 158
+PASS doGet(data, 59) is 159
+PASS doGet(data, 60) is 160
+PASS doGet(data, 61) is 161
+PASS doGet(data, 62) is 162
+PASS doGet(data, 63) is 163
+PASS doGet(data, 64) is 164
+PASS doGet(data, 65) is 165
+PASS doGet(data, 66) is 166
+PASS doGet(data, 67) is 167
+PASS doGet(data, 68) is 168
+PASS doGet(data, 69) is 169
+PASS doGet(data, 70) is 170
+PASS doGet(data, 71) is 171
+PASS doGet(data, 72) is 172
+PASS doGet(data, 73) is 173
+PASS doGet(data, 74) is 174
+PASS doGet(data, 75) is 175
+PASS doGet(data, 76) is 176
+PASS doGet(data, 77) is 177
+PASS doGet(data, 78) is 178
+PASS doGet(data, 79) is 179
+PASS doGet(data, 80) is 180
+PASS doGet(data, 81) is 181
+PASS doGet(data, 82) is 182
+PASS doGet(data, 83) is 183
+PASS doGet(data, 84) is 184
+PASS doGet(data, 85) is 185
+PASS doGet(data, 86) is 186
+PASS doGet(data, 87) is 187
+PASS doGet(data, 88) is 188
+PASS doGet(data, 89) is 189
+PASS doGet(data, 90) is 190
+PASS doGet(data, 91) is 191
+PASS doGet(data, 92) is 192
+PASS doGet(data, 93) is 193
+PASS doGet(data, 94) is 194
+PASS doGet(data, 95) is 195
+PASS doGet(data, 96) is 196
+PASS doGet(data, 97) is 197
+PASS doGet(data, 98) is 198
+PASS doGet(data, 99) is 199
+PASS doGet(data, 0) is 200
+PASS doGet(data, 1) is 201
+PASS doGet(data, 2) is 202
+PASS doGet(data, 3) is 203
+PASS doGet(data, 4) is 204
+PASS doGet(data, 5) is 205
+PASS doGet(data, 6) is 206
+PASS doGet(data, 7) is 207
+PASS doGet(data, 8) is 208
+PASS doGet(data, 9) is 209
+PASS doGet(data, 10) is 210
+PASS doGet(data, 11) is 211
+PASS doGet(data, 12) is 212
+PASS doGet(data, 13) is 213
+PASS doGet(data, 14) is 214
+PASS doGet(data, 15) is 215
+PASS doGet(data, 16) is 216
+PASS doGet(data, 17) is 217
+PASS doGet(data, 18) is 218
+PASS doGet(data, 19) is 219
+PASS doGet(data, 20) is 220
+PASS doGet(data, 21) is 221
+PASS doGet(data, 22) is 222
+PASS doGet(data, 23) is 223
+PASS doGet(data, 24) is 224
+PASS doGet(data, 25) is 225
+PASS doGet(data, 26) is 226
+PASS doGet(data, 27) is 227
+PASS doGet(data, 28) is 228
+PASS doGet(data, 29) is 229
+PASS doGet(data, 30) is 230
+PASS doGet(data, 31) is 231
+PASS doGet(data, 32) is 232
+PASS doGet(data, 33) is 233
+PASS doGet(data, 34) is 234
+PASS doGet(data, 35) is 235
+PASS doGet(data, 36) is 236
+PASS doGet(data, 37) is 237
+PASS doGet(data, 38) is 238
+PASS doGet(data, 39) is 239
+PASS doGet(data, 40) is 240
+PASS doGet(data, 41) is 241
+PASS doGet(data, 42) is 242
+PASS doGet(data, 43) is 243
+PASS doGet(data, 44) is 244
+PASS doGet(data, 45) is 245
+PASS doGet(data, 46) is 246
+PASS doGet(data, 47) is 247
+PASS doGet(data, 48) is 248
+PASS doGet(data, 49) is 249
+PASS doGet(data, 50) is 250
+PASS doGet(data, 51) is 251
+PASS doGet(data, 52) is 252
+PASS doGet(data, 53) is 253
+PASS doGet(data, 54) is 254
+PASS doGet(data, 55) is 255
+PASS doGet(data, 56) is 255
+PASS doGet(data, 57) is 255
+PASS doGet(data, 58) is 255
+PASS doGet(data, 59) is 255
+PASS doGet(data, 60) is 255
+PASS doGet(data, 61) is 255
+PASS doGet(data, 62) is 255
+PASS doGet(data, 63) is 255
+PASS doGet(data, 64) is 255
+PASS doGet(data, 65) is 255
+PASS doGet(data, 66) is 255
+PASS doGet(data, 67) is 255
+PASS doGet(data, 68) is 255
+PASS doGet(data, 69) is 255
+PASS doGet(data, 70) is 255
+PASS doGet(data, 71) is 255
+PASS doGet(data, 72) is 255
+PASS doGet(data, 73) is 255
+PASS doGet(data, 74) is 255
+PASS doGet(data, 75) is 255
+PASS doGet(data, 76) is 255
+PASS doGet(data, 77) is 255
+PASS doGet(data, 78) is 255
+PASS doGet(data, 79) is 255
+PASS doGet(data, 80) is 255
+PASS doGet(data, 81) is 255
+PASS doGet(data, 82) is 255
+PASS doGet(data, 83) is 255
+PASS doGet(data, 84) is 255
+PASS doGet(data, 85) is 255
+PASS doGet(data, 86) is 255
+PASS doGet(data, 87) is 255
+PASS doGet(data, 88) is 255
+PASS doGet(data, 89) is 255
+PASS doGet(data, 90) is 255
+PASS doGet(data, 91) is 255
+PASS doGet(data, 92) is 255
+PASS doGet(data, 93) is 255
+PASS doGet(data, 94) is 255
+PASS doGet(data, 95) is 255
+PASS doGet(data, 96) is 255
+PASS doGet(data, 97) is 255
+PASS doGet(data, 98) is 255
+PASS doGet(data, 99) is 255
+PASS doGet(data, 0) is 255
+PASS doGet(data, 1) is 255
+PASS doGet(data, 2) is 255
+PASS doGet(data, 3) is 255
+PASS doGet(data, 4) is 255
+PASS doGet(data, 5) is 255
+PASS doGet(data, 6) is 255
+PASS doGet(data, 7) is 255
+PASS doGet(data, 8) is 255
+PASS doGet(data, 9) is 255
+PASS doGet(data, 10) is 255
+PASS doGet(data, 11) is 255
+PASS doGet(data, 12) is 255
+PASS doGet(data, 13) is 255
+PASS doGet(data, 14) is 255
+PASS doGet(data, 15) is 255
+PASS doGet(data, 16) is 255
+PASS doGet(data, 17) is 255
+PASS doGet(data, 18) is 255
+PASS doGet(data, 19) is 255
+PASS doGet(data, 20) is 255
+PASS doGet(data, 21) is 255
+PASS doGet(data, 22) is 255
+PASS doGet(data, 23) is 255
+PASS doGet(data, 24) is 255
+PASS doGet(data, 25) is 255
+PASS doGet(data, 26) is 255
+PASS doGet(data, 27) is 255
+PASS doGet(data, 28) is 255
+PASS doGet(data, 29) is 255
+PASS doGet(data, 30) is 255
+PASS doGet(data, 31) is 255
+PASS doGet(data, 32) is 255
+PASS doGet(data, 33) is 255
+PASS doGet(data, 34) is 255
+PASS doGet(data, 35) is 255
+PASS doGet(data, 36) is 255
+PASS doGet(data, 37) is 255
+PASS doGet(data, 38) is 255
+PASS doGet(data, 39) is 255
+PASS doGet(data, 40) is 255
+PASS doGet(data, 41) is 255
+PASS doGet(data, 42) is 255
+PASS doGet(data, 43) is 255
+PASS doGet(data, 44) is 255
+PASS doGet(data, 45) is 255
+PASS doGet(data, 46) is 255
+PASS doGet(data, 47) is 255
+PASS doGet(data, 48) is 255
+PASS doGet(data, 49) is 255
+PASS doGet(data, 50) is 255
+PASS doGet(data, 51) is 255
+PASS doGet(data, 52) is 255
+PASS doGet(data, 53) is 255
+PASS doGet(data, 54) is 255
+PASS doGet(data, 55) is 255
+PASS doGet(data, 56) is 255
+PASS doGet(data, 57) is 255
+PASS doGet(data, 58) is 255
+PASS doGet(data, 59) is 255
+PASS doGet(data, 60) is 255
+PASS doGet(data, 61) is 255
+PASS doGet(data, 62) is 255
+PASS doGet(data, 63) is 255
+PASS doGet(data, 64) is 255
+PASS doGet(data, 65) is 255
+PASS doGet(data, 66) is 255
+PASS doGet(data, 67) is 255
+PASS doGet(data, 68) is 255
+PASS doGet(data, 69) is 255
+PASS doGet(data, 70) is 255
+PASS doGet(data, 71) is 255
+PASS doGet(data, 72) is 255
+PASS doGet(data, 73) is 255
+PASS doGet(data, 74) is 255
+PASS doGet(data, 75) is 255
+PASS doGet(data, 76) is 255
+PASS doGet(data, 77) is 255
+PASS doGet(data, 78) is 255
+PASS doGet(data, 79) is 255
+PASS doGet(data, 80) is 255
+PASS doGet(data, 81) is 255
+PASS doGet(data, 82) is 255
+PASS doGet(data, 83) is 255
+PASS doGet(data, 84) is 255
+PASS doGet(data, 85) is 255
+PASS doGet(data, 86) is 255
+PASS doGet(data, 87) is 255
+PASS doGet(data, 88) is 255
+PASS doGet(data, 89) is 255
+PASS doGet(data, 90) is 255
+PASS doGet(data, 91) is 255
+PASS doGet(data, 92) is 255
+PASS doGet(data, 93) is 255
+PASS doGet(data, 94) is 255
+PASS doGet(data, 95) is 255
+PASS doGet(data, 96) is 255
+PASS doGet(data, 97) is 255
+PASS doGet(data, 98) is 255
+PASS doGet(data, 99) is 255
+PASS doGet(data, 0) is 255
+PASS doGet(data, 1) is 255
+PASS doGet(data, 2) is 255
+PASS doGet(data, 3) is 255
+PASS doGet(data, 4) is 255
+PASS doGet(data, 5) is 255
+PASS doGet(data, 6) is 255
+PASS doGet(data, 7) is 255
+PASS doGet(data, 8) is 255
+PASS doGet(data, 9) is 255
+PASS doGet(data, 10) is 255
+PASS doGet(data, 11) is 255
+PASS doGet(data, 12) is 255
+PASS doGet(data, 13) is 255
+PASS doGet(data, 14) is 255
+PASS doGet(data, 15) is 255
+PASS doGet(data, 16) is 255
+PASS doGet(data, 17) is 255
+PASS doGet(data, 18) is 255
+PASS doGet(data, 19) is 255
+PASS doGet(data, 20) is 255
+PASS doGet(data, 21) is 255
+PASS doGet(data, 22) is 255
+PASS doGet(data, 23) is 255
+PASS doGet(data, 24) is 255
+PASS doGet(data, 25) is 255
+PASS doGet(data, 26) is 255
+PASS doGet(data, 27) is 255
+PASS doGet(data, 28) is 255
+PASS doGet(data, 29) is 255
+PASS doGet(data, 30) is 255
+PASS doGet(data, 31) is 255
+PASS doGet(data, 32) is 255
+PASS doGet(data, 33) is 255
+PASS doGet(data, 34) is 255
+PASS doGet(data, 35) is 255
+PASS doGet(data, 36) is 255
+PASS doGet(data, 37) is 255
+PASS doGet(data, 38) is 255
+PASS doGet(data, 39) is 255
+PASS doGet(data, 40) is 255
+PASS doGet(data, 41) is 255
+PASS doGet(data, 42) is 255
+PASS doGet(data, 43) is 255
+PASS doGet(data, 44) is 255
+PASS doGet(data, 45) is 255
+PASS doGet(data, 46) is 255
+PASS doGet(data, 47) is 255
+PASS doGet(data, 48) is 255
+PASS doGet(data, 49) is 255
+PASS doGet(data, 50) is 255
+PASS doGet(data, 51) is 255
+PASS doGet(data, 52) is 255
+PASS doGet(data, 53) is 255
+PASS doGet(data, 54) is 255
+PASS doGet(data, 55) is 255
+PASS doGet(data, 56) is 255
+PASS doGet(data, 57) is 255
+PASS doGet(data, 58) is 255
+PASS doGet(data, 59) is 255
+PASS doGet(data, 60) is 255
+PASS doGet(data, 61) is 255
+PASS doGet(data, 62) is 255
+PASS doGet(data, 63) is 255
+PASS doGet(data, 64) is 255
+PASS doGet(data, 65) is 255
+PASS doGet(data, 66) is 255
+PASS doGet(data, 67) is 255
+PASS doGet(data, 68) is 255
+PASS doGet(data, 69) is 255
+PASS doGet(data, 70) is 255
+PASS doGet(data, 71) is 255
+PASS doGet(data, 72) is 255
+PASS doGet(data, 73) is 255
+PASS doGet(data, 74) is 255
+PASS doGet(data, 75) is 255
+PASS doGet(data, 76) is 255
+PASS doGet(data, 77) is 255
+PASS doGet(data, 78) is 255
+PASS doGet(data, 79) is 255
+PASS doGet(data, 80) is 255
+PASS doGet(data, 81) is 255
+PASS doGet(data, 82) is 255
+PASS doGet(data, 83) is 255
+PASS doGet(data, 84) is 255
+PASS doGet(data, 85) is 255
+PASS doGet(data, 86) is 255
+PASS doGet(data, 87) is 255
+PASS doGet(data, 88) is 255
+PASS doGet(data, 89) is 255
+PASS doGet(data, 90) is 255
+PASS doGet(data, 91) is 255
+PASS doGet(data, 92) is 255
+PASS doGet(data, 93) is 255
+PASS doGet(data, 94) is 255
+PASS doGet(data, 95) is 255
+PASS doGet(data, 96) is 255
+PASS doGet(data, 97) is 255
+PASS doGet(data, 98) is 255
+PASS doGet(data, 99) is 255
+PASS doGet(data, 0) is 255
+PASS doGet(data, 1) is 255
+PASS doGet(data, 2) is 255
+PASS doGet(data, 3) is 255
+PASS doGet(data, 4) is 255
+PASS doGet(data, 5) is 255
+PASS doGet(data, 6) is 255
+PASS doGet(data, 7) is 255
+PASS doGet(data, 8) is 255
+PASS doGet(data, 9) is 255
+PASS doGet(data, 10) is 255
+PASS doGet(data, 11) is 255
+PASS doGet(data, 12) is 255
+PASS doGet(data, 13) is 255
+PASS doGet(data, 14) is 255
+PASS doGet(data, 15) is 255
+PASS doGet(data, 16) is 255
+PASS doGet(data, 17) is 255
+PASS doGet(data, 18) is 255
+PASS doGet(data, 19) is 255
+PASS doGet(data, 20) is 255
+PASS doGet(data, 21) is 255
+PASS doGet(data, 22) is 255
+PASS doGet(data, 23) is 255
+PASS doGet(data, 24) is 255
+PASS doGet(data, 25) is 255
+PASS doGet(data, 26) is 255
+PASS doGet(data, 27) is 255
+PASS doGet(data, 28) is 255
+PASS doGet(data, 29) is 255
+PASS doGet(data, 30) is 255
+PASS doGet(data, 31) is 255
+PASS doGet(data, 32) is 255
+PASS doGet(data, 33) is 255
+PASS doGet(data, 34) is 255
+PASS doGet(data, 35) is 255
+PASS doGet(data, 36) is 255
+PASS doGet(data, 37) is 255
+PASS doGet(data, 38) is 255
+PASS doGet(data, 39) is 255
+PASS doGet(data, 40) is 255
+PASS doGet(data, 41) is 255
+PASS doGet(data, 42) is 255
+PASS doGet(data, 43) is 255
+PASS doGet(data, 44) is 255
+PASS doGet(data, 45) is 255
+PASS doGet(data, 46) is 255
+PASS doGet(data, 47) is 255
+PASS doGet(data, 48) is 255
+PASS doGet(data, 49) is 255
+PASS doGet(data, 50) is 255
+PASS doGet(data, 51) is 255
+PASS doGet(data, 52) is 255
+PASS doGet(data, 53) is 255
+PASS doGet(data, 54) is 255
+PASS doGet(data, 55) is 255
+PASS doGet(data, 56) is 255
+PASS doGet(data, 57) is 255
+PASS doGet(data, 58) is 255
+PASS doGet(data, 59) is 255
+PASS doGet(data, 60) is 255
+PASS doGet(data, 61) is 255
+PASS doGet(data, 62) is 255
+PASS doGet(data, 63) is 255
+PASS doGet(data, 64) is 255
+PASS doGet(data, 65) is 255
+PASS doGet(data, 66) is 255
+PASS doGet(data, 67) is 255
+PASS doGet(data, 68) is 255
+PASS doGet(data, 69) is 255
+PASS doGet(data, 70) is 255
+PASS doGet(data, 71) is 255
+PASS doGet(data, 72) is 255
+PASS doGet(data, 73) is 255
+PASS doGet(data, 74) is 255
+PASS doGet(data, 75) is 255
+PASS doGet(data, 76) is 255
+PASS doGet(data, 77) is 255
+PASS doGet(data, 78) is 255
+PASS doGet(data, 79) is 255
+PASS doGet(data, 80) is 255
+PASS doGet(data, 81) is 255
+PASS doGet(data, 82) is 255
+PASS doGet(data, 83) is 255
+PASS doGet(data, 84) is 255
+PASS doGet(data, 85) is 255
+PASS doGet(data, 86) is 255
+PASS doGet(data, 87) is 255
+PASS doGet(data, 88) is 255
+PASS doGet(data, 89) is 255
+PASS doGet(data, 90) is 255
+PASS doGet(data, 91) is 255
+PASS doGet(data, 92) is 255
+PASS doGet(data, 93) is 255
+PASS doGet(data, 94) is 255
+PASS doGet(data, 95) is 255
+PASS doGet(data, 96) is 255
+PASS doGet(data, 97) is 255
+PASS doGet(data, 98) is 255
+PASS doGet(data, 99) is 255
+PASS doGet(data, 0) is 255
+PASS doGet(data, 1) is 255
+PASS doGet(data, 2) is 255
+PASS doGet(data, 3) is 255
+PASS doGet(data, 4) is 255
+PASS doGet(data, 5) is 255
+PASS doGet(data, 6) is 255
+PASS doGet(data, 7) is 255
+PASS doGet(data, 8) is 255
+PASS doGet(data, 9) is 255
+PASS doGet(data, 10) is 255
+PASS doGet(data, 11) is 255
+PASS doGet(data, 12) is 255
+PASS doGet(data, 13) is 255
+PASS doGet(data, 14) is 255
+PASS doGet(data, 15) is 255
+PASS doGet(data, 16) is 255
+PASS doGet(data, 17) is 255
+PASS doGet(data, 18) is 255
+PASS doGet(data, 19) is 255
+PASS doGet(data, 20) is 255
+PASS doGet(data, 21) is 255
+PASS doGet(data, 22) is 255
+PASS doGet(data, 23) is 255
+PASS doGet(data, 24) is 255
+PASS doGet(data, 25) is 255
+PASS doGet(data, 26) is 255
+PASS doGet(data, 27) is 255
+PASS doGet(data, 28) is 255
+PASS doGet(data, 29) is 255
+PASS doGet(data, 30) is 255
+PASS doGet(data, 31) is 255
+PASS doGet(data, 32) is 255
+PASS doGet(data, 33) is 255
+PASS doGet(data, 34) is 255
+PASS doGet(data, 35) is 255
+PASS doGet(data, 36) is 255
+PASS doGet(data, 37) is 255
+PASS doGet(data, 38) is 255
+PASS doGet(data, 39) is 255
+PASS doGet(data, 40) is 255
+PASS doGet(data, 41) is 255
+PASS doGet(data, 42) is 255
+PASS doGet(data, 43) is 255
+PASS doGet(data, 44) is 255
+PASS doGet(data, 45) is 255
+PASS doGet(data, 46) is 255
+PASS doGet(data, 47) is 255
+PASS doGet(data, 48) is 255
+PASS doGet(data, 49) is 255
+PASS doGet(data, 50) is 255
+PASS doGet(data, 51) is 255
+PASS doGet(data, 52) is 255
+PASS doGet(data, 53) is 255
+PASS doGet(data, 54) is 255
+PASS doGet(data, 55) is 255
+PASS doGet(data, 56) is 255
+PASS doGet(data, 57) is 255
+PASS doGet(data, 58) is 255
+PASS doGet(data, 59) is 255
+PASS doGet(data, 60) is 255
+PASS doGet(data, 61) is 255
+PASS doGet(data, 62) is 255
+PASS doGet(data, 63) is 255
+PASS doGet(data, 64) is 255
+PASS doGet(data, 65) is 255
+PASS doGet(data, 66) is 255
+PASS doGet(data, 67) is 255
+PASS doGet(data, 68) is 255
+PASS doGet(data, 69) is 255
+PASS doGet(data, 70) is 255
+PASS doGet(data, 71) is 255
+PASS doGet(data, 72) is 255
+PASS doGet(data, 73) is 255
+PASS doGet(data, 74) is 255
+PASS doGet(data, 75) is 255
+PASS doGet(data, 76) is 255
+PASS doGet(data, 77) is 255
+PASS doGet(data, 78) is 255
+PASS doGet(data, 79) is 255
+PASS doGet(data, 80) is 255
+PASS doGet(data, 81) is 255
+PASS doGet(data, 82) is 255
+PASS doGet(data, 83) is 255
+PASS doGet(data, 84) is 255
+PASS doGet(data, 85) is 255
+PASS doGet(data, 86) is 255
+PASS doGet(data, 87) is 255
+PASS doGet(data, 88) is 255
+PASS doGet(data, 89) is 255
+PASS doGet(data, 90) is 255
+PASS doGet(data, 91) is 255
+PASS doGet(data, 92) is 255
+PASS doGet(data, 93) is 255
+PASS doGet(data, 94) is 255
+PASS doGet(data, 95) is 255
+PASS doGet(data, 96) is 255
+PASS doGet(data, 97) is 255
+PASS doGet(data, 98) is 255
+PASS doGet(data, 99) is 255
+PASS doGet(data, 0) is 255
+PASS doGet(data, 1) is 255
+PASS doGet(data, 2) is 255
+PASS doGet(data, 3) is 255
+PASS doGet(data, 4) is 255
+PASS doGet(data, 5) is 255
+PASS doGet(data, 6) is 255
+PASS doGet(data, 7) is 255
+PASS doGet(data, 8) is 255
+PASS doGet(data, 9) is 255
+PASS doGet(data, 10) is 255
+PASS doGet(data, 11) is 255
+PASS doGet(data, 12) is 255
+PASS doGet(data, 13) is 255
+PASS doGet(data, 14) is 255
+PASS doGet(data, 15) is 255
+PASS doGet(data, 16) is 255
+PASS doGet(data, 17) is 255
+PASS doGet(data, 18) is 255
+PASS doGet(data, 19) is 255
+PASS doGet(data, 20) is 255
+PASS doGet(data, 21) is 255
+PASS doGet(data, 22) is 255
+PASS doGet(data, 23) is 255
+PASS doGet(data, 24) is 255
+PASS doGet(data, 25) is 255
+PASS doGet(data, 26) is 255
+PASS doGet(data, 27) is 255
+PASS doGet(data, 28) is 255
+PASS doGet(data, 29) is 255
+PASS doGet(data, 30) is 255
+PASS doGet(data, 31) is 255
+PASS doGet(data, 32) is 255
+PASS doGet(data, 33) is 255
+PASS doGet(data, 34) is 255
+PASS doGet(data, 35) is 255
+PASS doGet(data, 36) is 255
+PASS doGet(data, 37) is 255
+PASS doGet(data, 38) is 255
+PASS doGet(data, 39) is 255
+PASS doGet(data, 40) is 255
+PASS doGet(data, 41) is 255
+PASS doGet(data, 42) is 255
+PASS doGet(data, 43) is 255
+PASS doGet(data, 44) is 255
+PASS doGet(data, 45) is 255
+PASS doGet(data, 46) is 255
+PASS doGet(data, 47) is 255
+PASS doGet(data, 48) is 255
+PASS doGet(data, 49) is 255
+PASS doGet(data, 50) is 255
+PASS doGet(data, 51) is 255
+PASS doGet(data, 52) is 255
+PASS doGet(data, 53) is 255
+PASS doGet(data, 54) is 255
+PASS doGet(data, 55) is 255
+PASS doGet(data, 56) is 255
+PASS doGet(data, 57) is 255
+PASS doGet(data, 58) is 255
+PASS doGet(data, 59) is 255
+PASS doGet(data, 60) is 255
+PASS doGet(data, 61) is 255
+PASS doGet(data, 62) is 255
+PASS doGet(data, 63) is 255
+PASS doGet(data, 64) is 255
+PASS doGet(data, 65) is 255
+PASS doGet(data, 66) is 255
+PASS doGet(data, 67) is 255
+PASS doGet(data, 68) is 255
+PASS doGet(data, 69) is 255
+PASS doGet(data, 70) is 255
+PASS doGet(data, 71) is 255
+PASS doGet(data, 72) is 255
+PASS doGet(data, 73) is 255
+PASS doGet(data, 74) is 255
+PASS doGet(data, 75) is 255
+PASS doGet(data, 76) is 255
+PASS doGet(data, 77) is 255
+PASS doGet(data, 78) is 255
+PASS doGet(data, 79) is 255
+PASS doGet(data, 80) is 255
+PASS doGet(data, 81) is 255
+PASS doGet(data, 82) is 255
+PASS doGet(data, 83) is 255
+PASS doGet(data, 84) is 255
+PASS doGet(data, 85) is 255
+PASS doGet(data, 86) is 255
+PASS doGet(data, 87) is 255
+PASS doGet(data, 88) is 255
+PASS doGet(data, 89) is 255
+PASS doGet(data, 90) is 255
+PASS doGet(data, 91) is 255
+PASS doGet(data, 92) is 255
+PASS doGet(data, 93) is 255
+PASS doGet(data, 94) is 255
+PASS doGet(data, 95) is 255
+PASS doGet(data, 96) is 255
+PASS doGet(data, 97) is 255
+PASS doGet(data, 98) is 255
+PASS doGet(data, 99) is 255
+PASS doGet(data, 0) is 255
+PASS doGet(data, 1) is 255
+PASS doGet(data, 2) is 255
+PASS doGet(data, 3) is 255
+PASS doGet(data, 4) is 255
+PASS doGet(data, 5) is 255
+PASS doGet(data, 6) is 255
+PASS doGet(data, 7) is 255
+PASS doGet(data, 8) is 255
+PASS doGet(data, 9) is 255
+PASS doGet(data, 10) is 255
+PASS doGet(data, 11) is 255
+PASS doGet(data, 12) is 255
+PASS doGet(data, 13) is 255
+PASS doGet(data, 14) is 255
+PASS doGet(data, 15) is 255
+PASS doGet(data, 16) is 255
+PASS doGet(data, 17) is 255
+PASS doGet(data, 18) is 255
+PASS doGet(data, 19) is 255
+PASS doGet(data, 20) is 255
+PASS doGet(data, 21) is 255
+PASS doGet(data, 22) is 255
+PASS doGet(data, 23) is 255
+PASS doGet(data, 24) is 255
+PASS doGet(data, 25) is 255
+PASS doGet(data, 26) is 255
+PASS doGet(data, 27) is 255
+PASS doGet(data, 28) is 255
+PASS doGet(data, 29) is 255
+PASS doGet(data, 30) is 255
+PASS doGet(data, 31) is 255
+PASS doGet(data, 32) is 255
+PASS doGet(data, 33) is 255
+PASS doGet(data, 34) is 255
+PASS doGet(data, 35) is 255
+PASS doGet(data, 36) is 255
+PASS doGet(data, 37) is 255
+PASS doGet(data, 38) is 255
+PASS doGet(data, 39) is 255
+PASS doGet(data, 40) is 255
+PASS doGet(data, 41) is 255
+PASS doGet(data, 42) is 255
+PASS doGet(data, 43) is 255
+PASS doGet(data, 44) is 255
+PASS doGet(data, 45) is 255
+PASS doGet(data, 46) is 255
+PASS doGet(data, 47) is 255
+PASS doGet(data, 48) is 255
+PASS doGet(data, 49) is 255
+PASS doGet(data, 50) is 255
+PASS doGet(data, 51) is 255
+PASS doGet(data, 52) is 255
+PASS doGet(data, 53) is 255
+PASS doGet(data, 54) is 255
+PASS doGet(data, 55) is 255
+PASS doGet(data, 56) is 255
+PASS doGet(data, 57) is 255
+PASS doGet(data, 58) is 255
+PASS doGet(data, 59) is 255
+PASS doGet(data, 60) is 255
+PASS doGet(data, 61) is 255
+PASS doGet(data, 62) is 255
+PASS doGet(data, 63) is 255
+PASS doGet(data, 64) is 255
+PASS doGet(data, 65) is 255
+PASS doGet(data, 66) is 255
+PASS doGet(data, 67) is 255
+PASS doGet(data, 68) is 255
+PASS doGet(data, 69) is 255
+PASS doGet(data, 70) is 255
+PASS doGet(data, 71) is 255
+PASS doGet(data, 72) is 255
+PASS doGet(data, 73) is 255
+PASS doGet(data, 74) is 255
+PASS doGet(data, 75) is 255
+PASS doGet(data, 76) is 255
+PASS doGet(data, 77) is 255
+PASS doGet(data, 78) is 255
+PASS doGet(data, 79) is 255
+PASS doGet(data, 80) is 255
+PASS doGet(data, 81) is 255
+PASS doGet(data, 82) is 255
+PASS doGet(data, 83) is 255
+PASS doGet(data, 84) is 255
+PASS doGet(data, 85) is 255
+PASS doGet(data, 86) is 255
+PASS doGet(data, 87) is 255
+PASS doGet(data, 88) is 255
+PASS doGet(data, 89) is 255
+PASS doGet(data, 90) is 255
+PASS doGet(data, 91) is 255
+PASS doGet(data, 92) is 255
+PASS doGet(data, 93) is 255
+PASS doGet(data, 94) is 255
+PASS doGet(data, 95) is 255
+PASS doGet(data, 96) is 255
+PASS doGet(data, 97) is 255
+PASS doGet(data, 98) is 255
+PASS doGet(data, 99) is 255
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/js/dfg-byte-array-put.html (0 => 99917)


--- trunk/LayoutTests/fast/js/dfg-byte-array-put.html	                        (rev 0)
+++ trunk/LayoutTests/fast/js/dfg-byte-array-put.html	2011-11-11 01:07:44 UTC (rev 99917)
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<script src=""
+<script src=""
+</body>
+</html>

Added: trunk/LayoutTests/fast/js/script-tests/dfg-byte-array-put.js (0 => 99917)


--- trunk/LayoutTests/fast/js/script-tests/dfg-byte-array-put.js	                        (rev 0)
+++ trunk/LayoutTests/fast/js/script-tests/dfg-byte-array-put.js	2011-11-11 01:07:44 UTC (rev 99917)
@@ -0,0 +1,30 @@
+description(
+"This tests that the DFG JIT's optimizations for byte arrays work as expected."
+);
+
+function doPut(array, index, value) {
+    array[index] = value;
+}
+
+function doGet(array, index) {
+    return array[index];
+}
+
+canvas = document.createElement("canvas");
+context = canvas.getContext("2d");
+imageData = context.createImageData(10,10);
+data = ""
+
+for (var i = 0; i < 1000; ++i) {
+    doPut(data, i % 100, i - 100);
+    var expectedValue;
+    if (i < 100)
+        expectedValue = 0;
+    else if (i > 355)
+        expectedValue = 255;
+    else
+        expectedValue = i - 100;
+    shouldBe("doGet(data, " + (i % 100) + ")", "" + expectedValue);
+}
+
+var successfullyParsed = true;

Modified: trunk/LayoutTests/fast/js/script-tests/dfg-min-max.js (99916 => 99917)


--- trunk/LayoutTests/fast/js/script-tests/dfg-min-max.js	2011-11-11 00:50:58 UTC (rev 99916)
+++ trunk/LayoutTests/fast/js/script-tests/dfg-min-max.js	2011-11-11 01:07:44 UTC (rev 99917)
@@ -38,3 +38,5 @@
 shouldBe("doMax(NaN, 2.5)", "NaN");
 
 shouldBe("doMax(NaN, NaN)", "NaN");
+
+var successfullyParsed = true;

Modified: trunk/Source/_javascript_Core/ChangeLog (99916 => 99917)


--- trunk/Source/_javascript_Core/ChangeLog	2011-11-11 00:50:58 UTC (rev 99916)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-11-11 01:07:44 UTC (rev 99917)
@@ -1,3 +1,13 @@
+2011-11-09  Filip Pizlo  <[email protected]>
+
+        DFG byte array support sometimes clamps values incorrectly
+        https://bugs.webkit.org/show_bug.cgi?id=71975
+
+        Reviewed by Oliver Hunt.
+
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
+
 2011-11-10  Filip Pizlo  <[email protected]>
 
         ValueProfile/PredictedType contains dead code, and doesn't recognize functions

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp (99916 => 99917)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2011-11-11 00:50:58 UTC (rev 99916)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2011-11-11 01:07:44 UTC (rev 99917)
@@ -704,9 +704,10 @@
         GPRReg scratchReg = scratch.gpr();
         m_jit.move(valueOp.gpr(), scratchReg);
         MacroAssembler::Jump inBounds = m_jit.branch32(MacroAssembler::BelowOrEqual, scratchReg, TrustedImm32(0xff));
-        m_jit.branch32(MacroAssembler::GreaterThan, scratchReg, TrustedImm32(0xff));
+        MacroAssembler::Jump tooBig = m_jit.branch32(MacroAssembler::GreaterThan, scratchReg, TrustedImm32(0xff));
         m_jit.xorPtr(scratchReg, scratchReg);
         MacroAssembler::Jump clamped = m_jit.jump();
+        tooBig.link(&m_jit);
         m_jit.move(TrustedImm32(255), scratchReg);
         clamped.link(&m_jit);
         inBounds.link(&m_jit);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to