| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 7132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7143 __ Mov(x0, reinterpret_cast<int64_t>(results_scvtf_x)); | 7143 __ Mov(x0, reinterpret_cast<int64_t>(results_scvtf_x)); |
| 7144 __ Mov(x1, reinterpret_cast<int64_t>(results_ucvtf_x)); | 7144 __ Mov(x1, reinterpret_cast<int64_t>(results_ucvtf_x)); |
| 7145 __ Mov(x2, reinterpret_cast<int64_t>(results_scvtf_w)); | 7145 __ Mov(x2, reinterpret_cast<int64_t>(results_scvtf_w)); |
| 7146 __ Mov(x3, reinterpret_cast<int64_t>(results_ucvtf_w)); | 7146 __ Mov(x3, reinterpret_cast<int64_t>(results_ucvtf_w)); |
| 7147 | 7147 |
| 7148 __ Mov(x10, s64); | 7148 __ Mov(x10, s64); |
| 7149 | 7149 |
| 7150 // Corrupt the top word, in case it is accidentally used during W-register | 7150 // Corrupt the top word, in case it is accidentally used during W-register |
| 7151 // conversions. | 7151 // conversions. |
| 7152 __ Mov(x11, 0x5555555555555555); | 7152 __ Mov(x11, 0x5555555555555555); |
| 7153 __ Bfi(x11, x10, 0, kWRegSize); | 7153 __ Bfi(x11, x10, 0, kWRegSizeInBits); |
| 7154 | 7154 |
| 7155 // Test integer conversions. | 7155 // Test integer conversions. |
| 7156 __ Scvtf(d0, x10); | 7156 __ Scvtf(d0, x10); |
| 7157 __ Ucvtf(d1, x10); | 7157 __ Ucvtf(d1, x10); |
| 7158 __ Scvtf(d2, w11); | 7158 __ Scvtf(d2, w11); |
| 7159 __ Ucvtf(d3, w11); | 7159 __ Ucvtf(d3, w11); |
| 7160 __ Str(d0, MemOperand(x0)); | 7160 __ Str(d0, MemOperand(x0)); |
| 7161 __ Str(d1, MemOperand(x1)); | 7161 __ Str(d1, MemOperand(x1)); |
| 7162 __ Str(d2, MemOperand(x2)); | 7162 __ Str(d2, MemOperand(x2)); |
| 7163 __ Str(d3, MemOperand(x3)); | 7163 __ Str(d3, MemOperand(x3)); |
| 7164 | 7164 |
| 7165 // Test all possible values of fbits. | 7165 // Test all possible values of fbits. |
| 7166 for (int fbits = 1; fbits <= 32; fbits++) { | 7166 for (int fbits = 1; fbits <= 32; fbits++) { |
| 7167 __ Scvtf(d0, x10, fbits); | 7167 __ Scvtf(d0, x10, fbits); |
| 7168 __ Ucvtf(d1, x10, fbits); | 7168 __ Ucvtf(d1, x10, fbits); |
| 7169 __ Scvtf(d2, w11, fbits); | 7169 __ Scvtf(d2, w11, fbits); |
| 7170 __ Ucvtf(d3, w11, fbits); | 7170 __ Ucvtf(d3, w11, fbits); |
| 7171 __ Str(d0, MemOperand(x0, fbits * kDRegSizeInBytes)); | 7171 __ Str(d0, MemOperand(x0, fbits * kDRegSize)); |
| 7172 __ Str(d1, MemOperand(x1, fbits * kDRegSizeInBytes)); | 7172 __ Str(d1, MemOperand(x1, fbits * kDRegSize)); |
| 7173 __ Str(d2, MemOperand(x2, fbits * kDRegSizeInBytes)); | 7173 __ Str(d2, MemOperand(x2, fbits * kDRegSize)); |
| 7174 __ Str(d3, MemOperand(x3, fbits * kDRegSizeInBytes)); | 7174 __ Str(d3, MemOperand(x3, fbits * kDRegSize)); |
| 7175 } | 7175 } |
| 7176 | 7176 |
| 7177 // Conversions from W registers can only handle fbits values <= 32, so just | 7177 // Conversions from W registers can only handle fbits values <= 32, so just |
| 7178 // test conversions from X registers for 32 < fbits <= 64. | 7178 // test conversions from X registers for 32 < fbits <= 64. |
| 7179 for (int fbits = 33; fbits <= 64; fbits++) { | 7179 for (int fbits = 33; fbits <= 64; fbits++) { |
| 7180 __ Scvtf(d0, x10, fbits); | 7180 __ Scvtf(d0, x10, fbits); |
| 7181 __ Ucvtf(d1, x10, fbits); | 7181 __ Ucvtf(d1, x10, fbits); |
| 7182 __ Str(d0, MemOperand(x0, fbits * kDRegSizeInBytes)); | 7182 __ Str(d0, MemOperand(x0, fbits * kDRegSize)); |
| 7183 __ Str(d1, MemOperand(x1, fbits * kDRegSizeInBytes)); | 7183 __ Str(d1, MemOperand(x1, fbits * kDRegSize)); |
| 7184 } | 7184 } |
| 7185 | 7185 |
| 7186 END(); | 7186 END(); |
| 7187 RUN(); | 7187 RUN(); |
| 7188 | 7188 |
| 7189 // Check the results. | 7189 // Check the results. |
| 7190 double expected_scvtf_base = rawbits_to_double(expected_scvtf_bits); | 7190 double expected_scvtf_base = rawbits_to_double(expected_scvtf_bits); |
| 7191 double expected_ucvtf_base = rawbits_to_double(expected_ucvtf_bits); | 7191 double expected_ucvtf_base = rawbits_to_double(expected_ucvtf_bits); |
| 7192 | 7192 |
| 7193 for (int fbits = 0; fbits <= 32; fbits++) { | 7193 for (int fbits = 0; fbits <= 32; fbits++) { |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7298 __ Mov(x0, reinterpret_cast<int64_t>(results_scvtf_x)); | 7298 __ Mov(x0, reinterpret_cast<int64_t>(results_scvtf_x)); |
| 7299 __ Mov(x1, reinterpret_cast<int64_t>(results_ucvtf_x)); | 7299 __ Mov(x1, reinterpret_cast<int64_t>(results_ucvtf_x)); |
| 7300 __ Mov(x2, reinterpret_cast<int64_t>(results_scvtf_w)); | 7300 __ Mov(x2, reinterpret_cast<int64_t>(results_scvtf_w)); |
| 7301 __ Mov(x3, reinterpret_cast<int64_t>(results_ucvtf_w)); | 7301 __ Mov(x3, reinterpret_cast<int64_t>(results_ucvtf_w)); |
| 7302 | 7302 |
| 7303 __ Mov(x10, s64); | 7303 __ Mov(x10, s64); |
| 7304 | 7304 |
| 7305 // Corrupt the top word, in case it is accidentally used during W-register | 7305 // Corrupt the top word, in case it is accidentally used during W-register |
| 7306 // conversions. | 7306 // conversions. |
| 7307 __ Mov(x11, 0x5555555555555555); | 7307 __ Mov(x11, 0x5555555555555555); |
| 7308 __ Bfi(x11, x10, 0, kWRegSize); | 7308 __ Bfi(x11, x10, 0, kWRegSizeInBits); |
| 7309 | 7309 |
| 7310 // Test integer conversions. | 7310 // Test integer conversions. |
| 7311 __ Scvtf(s0, x10); | 7311 __ Scvtf(s0, x10); |
| 7312 __ Ucvtf(s1, x10); | 7312 __ Ucvtf(s1, x10); |
| 7313 __ Scvtf(s2, w11); | 7313 __ Scvtf(s2, w11); |
| 7314 __ Ucvtf(s3, w11); | 7314 __ Ucvtf(s3, w11); |
| 7315 __ Str(s0, MemOperand(x0)); | 7315 __ Str(s0, MemOperand(x0)); |
| 7316 __ Str(s1, MemOperand(x1)); | 7316 __ Str(s1, MemOperand(x1)); |
| 7317 __ Str(s2, MemOperand(x2)); | 7317 __ Str(s2, MemOperand(x2)); |
| 7318 __ Str(s3, MemOperand(x3)); | 7318 __ Str(s3, MemOperand(x3)); |
| 7319 | 7319 |
| 7320 // Test all possible values of fbits. | 7320 // Test all possible values of fbits. |
| 7321 for (int fbits = 1; fbits <= 32; fbits++) { | 7321 for (int fbits = 1; fbits <= 32; fbits++) { |
| 7322 __ Scvtf(s0, x10, fbits); | 7322 __ Scvtf(s0, x10, fbits); |
| 7323 __ Ucvtf(s1, x10, fbits); | 7323 __ Ucvtf(s1, x10, fbits); |
| 7324 __ Scvtf(s2, w11, fbits); | 7324 __ Scvtf(s2, w11, fbits); |
| 7325 __ Ucvtf(s3, w11, fbits); | 7325 __ Ucvtf(s3, w11, fbits); |
| 7326 __ Str(s0, MemOperand(x0, fbits * kSRegSizeInBytes)); | 7326 __ Str(s0, MemOperand(x0, fbits * kSRegSize)); |
| 7327 __ Str(s1, MemOperand(x1, fbits * kSRegSizeInBytes)); | 7327 __ Str(s1, MemOperand(x1, fbits * kSRegSize)); |
| 7328 __ Str(s2, MemOperand(x2, fbits * kSRegSizeInBytes)); | 7328 __ Str(s2, MemOperand(x2, fbits * kSRegSize)); |
| 7329 __ Str(s3, MemOperand(x3, fbits * kSRegSizeInBytes)); | 7329 __ Str(s3, MemOperand(x3, fbits * kSRegSize)); |
| 7330 } | 7330 } |
| 7331 | 7331 |
| 7332 // Conversions from W registers can only handle fbits values <= 32, so just | 7332 // Conversions from W registers can only handle fbits values <= 32, so just |
| 7333 // test conversions from X registers for 32 < fbits <= 64. | 7333 // test conversions from X registers for 32 < fbits <= 64. |
| 7334 for (int fbits = 33; fbits <= 64; fbits++) { | 7334 for (int fbits = 33; fbits <= 64; fbits++) { |
| 7335 __ Scvtf(s0, x10, fbits); | 7335 __ Scvtf(s0, x10, fbits); |
| 7336 __ Ucvtf(s1, x10, fbits); | 7336 __ Ucvtf(s1, x10, fbits); |
| 7337 __ Str(s0, MemOperand(x0, fbits * kSRegSizeInBytes)); | 7337 __ Str(s0, MemOperand(x0, fbits * kSRegSize)); |
| 7338 __ Str(s1, MemOperand(x1, fbits * kSRegSizeInBytes)); | 7338 __ Str(s1, MemOperand(x1, fbits * kSRegSize)); |
| 7339 } | 7339 } |
| 7340 | 7340 |
| 7341 END(); | 7341 END(); |
| 7342 RUN(); | 7342 RUN(); |
| 7343 | 7343 |
| 7344 // Check the results. | 7344 // Check the results. |
| 7345 float expected_scvtf_base = rawbits_to_float(expected_scvtf_bits); | 7345 float expected_scvtf_base = rawbits_to_float(expected_scvtf_bits); |
| 7346 float expected_ucvtf_base = rawbits_to_float(expected_ucvtf_bits); | 7346 float expected_ucvtf_base = rawbits_to_float(expected_ucvtf_bits); |
| 7347 | 7347 |
| 7348 for (int fbits = 0; fbits <= 32; fbits++) { | 7348 for (int fbits = 0; fbits <= 32; fbits++) { |
| (...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7974 // x6 should match x1[31:0]:x0[63:32] | 7974 // x6 should match x1[31:0]:x0[63:32] |
| 7975 // w7 should match x1[15:0]:x0[63:48] | 7975 // w7 should match x1[15:0]:x0[63:48] |
| 7976 __ Poke(x1, 8); | 7976 __ Poke(x1, 8); |
| 7977 __ Poke(x0, 0); | 7977 __ Poke(x0, 0); |
| 7978 { | 7978 { |
| 7979 ASSERT(__ StackPointer().Is(csp)); | 7979 ASSERT(__ StackPointer().Is(csp)); |
| 7980 __ Mov(x4, __ StackPointer()); | 7980 __ Mov(x4, __ StackPointer()); |
| 7981 __ SetStackPointer(x4); | 7981 __ SetStackPointer(x4); |
| 7982 | 7982 |
| 7983 __ Poke(wzr, 0); // Clobber the space we're about to drop. | 7983 __ Poke(wzr, 0); // Clobber the space we're about to drop. |
| 7984 __ Drop(1, kWRegSizeInBytes); | 7984 __ Drop(1, kWRegSize); |
| 7985 __ Peek(x6, 0); | 7985 __ Peek(x6, 0); |
| 7986 __ Claim(1); | 7986 __ Claim(1); |
| 7987 __ Peek(w7, 10); | 7987 __ Peek(w7, 10); |
| 7988 __ Poke(x3, 28); | 7988 __ Poke(x3, 28); |
| 7989 __ Poke(xzr, 0); // Clobber the space we're about to drop. | 7989 __ Poke(xzr, 0); // Clobber the space we're about to drop. |
| 7990 __ Drop(1); | 7990 __ Drop(1); |
| 7991 __ Poke(x2, 12); | 7991 __ Poke(x2, 12); |
| 7992 __ Push(w0); | 7992 __ Push(w0); |
| 7993 | 7993 |
| 7994 __ Mov(csp, __ StackPointer()); | 7994 __ Mov(csp, __ StackPointer()); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8156 } | 8156 } |
| 8157 | 8157 |
| 8158 TEARDOWN(); | 8158 TEARDOWN(); |
| 8159 } | 8159 } |
| 8160 | 8160 |
| 8161 | 8161 |
| 8162 TEST(push_pop_jssp_simple_32) { | 8162 TEST(push_pop_jssp_simple_32) { |
| 8163 INIT_V8(); | 8163 INIT_V8(); |
| 8164 for (int claim = 0; claim <= 8; claim++) { | 8164 for (int claim = 0; claim <= 8; claim++) { |
| 8165 for (int count = 0; count <= 8; count++) { | 8165 for (int count = 0; count <= 8; count++) { |
| 8166 PushPopJsspSimpleHelper(count, claim, kWRegSize, | 8166 PushPopJsspSimpleHelper(count, claim, kWRegSizeInBits, |
| 8167 PushPopByFour, PushPopByFour); | 8167 PushPopByFour, PushPopByFour); |
| 8168 PushPopJsspSimpleHelper(count, claim, kWRegSize, | 8168 PushPopJsspSimpleHelper(count, claim, kWRegSizeInBits, |
| 8169 PushPopByFour, PushPopRegList); | 8169 PushPopByFour, PushPopRegList); |
| 8170 PushPopJsspSimpleHelper(count, claim, kWRegSize, | 8170 PushPopJsspSimpleHelper(count, claim, kWRegSizeInBits, |
| 8171 PushPopRegList, PushPopByFour); | 8171 PushPopRegList, PushPopByFour); |
| 8172 PushPopJsspSimpleHelper(count, claim, kWRegSize, | 8172 PushPopJsspSimpleHelper(count, claim, kWRegSizeInBits, |
| 8173 PushPopRegList, PushPopRegList); | 8173 PushPopRegList, PushPopRegList); |
| 8174 } | 8174 } |
| 8175 // Test with the maximum number of registers. | 8175 // Test with the maximum number of registers. |
| 8176 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kWRegSize, | 8176 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kWRegSizeInBits, |
| 8177 PushPopByFour, PushPopByFour); | 8177 PushPopByFour, PushPopByFour); |
| 8178 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kWRegSize, | 8178 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kWRegSizeInBits, |
| 8179 PushPopByFour, PushPopRegList); | 8179 PushPopByFour, PushPopRegList); |
| 8180 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kWRegSize, | 8180 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kWRegSizeInBits, |
| 8181 PushPopRegList, PushPopByFour); | 8181 PushPopRegList, PushPopByFour); |
| 8182 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kWRegSize, | 8182 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kWRegSizeInBits, |
| 8183 PushPopRegList, PushPopRegList); | 8183 PushPopRegList, PushPopRegList); |
| 8184 } | 8184 } |
| 8185 } | 8185 } |
| 8186 | 8186 |
| 8187 | 8187 |
| 8188 TEST(push_pop_jssp_simple_64) { | 8188 TEST(push_pop_jssp_simple_64) { |
| 8189 INIT_V8(); | 8189 INIT_V8(); |
| 8190 for (int claim = 0; claim <= 8; claim++) { | 8190 for (int claim = 0; claim <= 8; claim++) { |
| 8191 for (int count = 0; count <= 8; count++) { | 8191 for (int count = 0; count <= 8; count++) { |
| 8192 PushPopJsspSimpleHelper(count, claim, kXRegSize, | 8192 PushPopJsspSimpleHelper(count, claim, kXRegSizeInBits, |
| 8193 PushPopByFour, PushPopByFour); | 8193 PushPopByFour, PushPopByFour); |
| 8194 PushPopJsspSimpleHelper(count, claim, kXRegSize, | 8194 PushPopJsspSimpleHelper(count, claim, kXRegSizeInBits, |
| 8195 PushPopByFour, PushPopRegList); | 8195 PushPopByFour, PushPopRegList); |
| 8196 PushPopJsspSimpleHelper(count, claim, kXRegSize, | 8196 PushPopJsspSimpleHelper(count, claim, kXRegSizeInBits, |
| 8197 PushPopRegList, PushPopByFour); | 8197 PushPopRegList, PushPopByFour); |
| 8198 PushPopJsspSimpleHelper(count, claim, kXRegSize, | 8198 PushPopJsspSimpleHelper(count, claim, kXRegSizeInBits, |
| 8199 PushPopRegList, PushPopRegList); | 8199 PushPopRegList, PushPopRegList); |
| 8200 } | 8200 } |
| 8201 // Test with the maximum number of registers. | 8201 // Test with the maximum number of registers. |
| 8202 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kXRegSize, | 8202 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kXRegSizeInBits, |
| 8203 PushPopByFour, PushPopByFour); | 8203 PushPopByFour, PushPopByFour); |
| 8204 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kXRegSize, | 8204 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kXRegSizeInBits, |
| 8205 PushPopByFour, PushPopRegList); | 8205 PushPopByFour, PushPopRegList); |
| 8206 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kXRegSize, | 8206 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kXRegSizeInBits, |
| 8207 PushPopRegList, PushPopByFour); | 8207 PushPopRegList, PushPopByFour); |
| 8208 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kXRegSize, | 8208 PushPopJsspSimpleHelper(kPushPopJsspMaxRegCount, claim, kXRegSizeInBits, |
| 8209 PushPopRegList, PushPopRegList); | 8209 PushPopRegList, PushPopRegList); |
| 8210 } | 8210 } |
| 8211 } | 8211 } |
| 8212 | 8212 |
| 8213 | 8213 |
| 8214 // The maximum number of registers that can be used by the PushPopFPJssp* tests, | 8214 // The maximum number of registers that can be used by the PushPopFPJssp* tests, |
| 8215 // where a reg_count field is provided. | 8215 // where a reg_count field is provided. |
| 8216 static int const kPushPopFPJsspMaxRegCount = -1; | 8216 static int const kPushPopFPJsspMaxRegCount = -1; |
| 8217 | 8217 |
| 8218 // Test a simple push-pop pattern: | 8218 // Test a simple push-pop pattern: |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8339 } | 8339 } |
| 8340 | 8340 |
| 8341 TEARDOWN(); | 8341 TEARDOWN(); |
| 8342 } | 8342 } |
| 8343 | 8343 |
| 8344 | 8344 |
| 8345 TEST(push_pop_fp_jssp_simple_32) { | 8345 TEST(push_pop_fp_jssp_simple_32) { |
| 8346 INIT_V8(); | 8346 INIT_V8(); |
| 8347 for (int claim = 0; claim <= 8; claim++) { | 8347 for (int claim = 0; claim <= 8; claim++) { |
| 8348 for (int count = 0; count <= 8; count++) { | 8348 for (int count = 0; count <= 8; count++) { |
| 8349 PushPopFPJsspSimpleHelper(count, claim, kSRegSize, | 8349 PushPopFPJsspSimpleHelper(count, claim, kSRegSizeInBits, |
| 8350 PushPopByFour, PushPopByFour); | 8350 PushPopByFour, PushPopByFour); |
| 8351 PushPopFPJsspSimpleHelper(count, claim, kSRegSize, | 8351 PushPopFPJsspSimpleHelper(count, claim, kSRegSizeInBits, |
| 8352 PushPopByFour, PushPopRegList); | 8352 PushPopByFour, PushPopRegList); |
| 8353 PushPopFPJsspSimpleHelper(count, claim, kSRegSize, | 8353 PushPopFPJsspSimpleHelper(count, claim, kSRegSizeInBits, |
| 8354 PushPopRegList, PushPopByFour); | 8354 PushPopRegList, PushPopByFour); |
| 8355 PushPopFPJsspSimpleHelper(count, claim, kSRegSize, | 8355 PushPopFPJsspSimpleHelper(count, claim, kSRegSizeInBits, |
| 8356 PushPopRegList, PushPopRegList); | 8356 PushPopRegList, PushPopRegList); |
| 8357 } | 8357 } |
| 8358 // Test with the maximum number of registers. | 8358 // Test with the maximum number of registers. |
| 8359 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kSRegSize, | 8359 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kSRegSizeInBits, |
| 8360 PushPopByFour, PushPopByFour); | 8360 PushPopByFour, PushPopByFour); |
| 8361 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kSRegSize, | 8361 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kSRegSizeInBits, |
| 8362 PushPopByFour, PushPopRegList); | 8362 PushPopByFour, PushPopRegList); |
| 8363 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kSRegSize, | 8363 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kSRegSizeInBits, |
| 8364 PushPopRegList, PushPopByFour); | 8364 PushPopRegList, PushPopByFour); |
| 8365 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kSRegSize, | 8365 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kSRegSizeInBits, |
| 8366 PushPopRegList, PushPopRegList); | 8366 PushPopRegList, PushPopRegList); |
| 8367 } | 8367 } |
| 8368 } | 8368 } |
| 8369 | 8369 |
| 8370 | 8370 |
| 8371 TEST(push_pop_fp_jssp_simple_64) { | 8371 TEST(push_pop_fp_jssp_simple_64) { |
| 8372 INIT_V8(); | 8372 INIT_V8(); |
| 8373 for (int claim = 0; claim <= 8; claim++) { | 8373 for (int claim = 0; claim <= 8; claim++) { |
| 8374 for (int count = 0; count <= 8; count++) { | 8374 for (int count = 0; count <= 8; count++) { |
| 8375 PushPopFPJsspSimpleHelper(count, claim, kDRegSize, | 8375 PushPopFPJsspSimpleHelper(count, claim, kDRegSizeInBits, |
| 8376 PushPopByFour, PushPopByFour); | 8376 PushPopByFour, PushPopByFour); |
| 8377 PushPopFPJsspSimpleHelper(count, claim, kDRegSize, | 8377 PushPopFPJsspSimpleHelper(count, claim, kDRegSizeInBits, |
| 8378 PushPopByFour, PushPopRegList); | 8378 PushPopByFour, PushPopRegList); |
| 8379 PushPopFPJsspSimpleHelper(count, claim, kDRegSize, | 8379 PushPopFPJsspSimpleHelper(count, claim, kDRegSizeInBits, |
| 8380 PushPopRegList, PushPopByFour); | 8380 PushPopRegList, PushPopByFour); |
| 8381 PushPopFPJsspSimpleHelper(count, claim, kDRegSize, | 8381 PushPopFPJsspSimpleHelper(count, claim, kDRegSizeInBits, |
| 8382 PushPopRegList, PushPopRegList); | 8382 PushPopRegList, PushPopRegList); |
| 8383 } | 8383 } |
| 8384 // Test with the maximum number of registers. | 8384 // Test with the maximum number of registers. |
| 8385 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kDRegSize, | 8385 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kDRegSizeInBits, |
| 8386 PushPopByFour, PushPopByFour); | 8386 PushPopByFour, PushPopByFour); |
| 8387 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kDRegSize, | 8387 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kDRegSizeInBits, |
| 8388 PushPopByFour, PushPopRegList); | 8388 PushPopByFour, PushPopRegList); |
| 8389 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kDRegSize, | 8389 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kDRegSizeInBits, |
| 8390 PushPopRegList, PushPopByFour); | 8390 PushPopRegList, PushPopByFour); |
| 8391 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kDRegSize, | 8391 PushPopFPJsspSimpleHelper(kPushPopFPJsspMaxRegCount, claim, kDRegSizeInBits, |
| 8392 PushPopRegList, PushPopRegList); | 8392 PushPopRegList, PushPopRegList); |
| 8393 } | 8393 } |
| 8394 } | 8394 } |
| 8395 | 8395 |
| 8396 | 8396 |
| 8397 // Push and pop data using an overlapping combination of Push/Pop and | 8397 // Push and pop data using an overlapping combination of Push/Pop and |
| 8398 // RegList-based methods. | 8398 // RegList-based methods. |
| 8399 static void PushPopJsspMixedMethodsHelper(int claim, int reg_size) { | 8399 static void PushPopJsspMixedMethodsHelper(int claim, int reg_size) { |
| 8400 SETUP(); | 8400 SETUP(); |
| 8401 | 8401 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8479 ASSERT_EQUAL_64(literal_base * 1, x[5]); | 8479 ASSERT_EQUAL_64(literal_base * 1, x[5]); |
| 8480 ASSERT_EQUAL_64(literal_base * 2, x[4]); | 8480 ASSERT_EQUAL_64(literal_base * 2, x[4]); |
| 8481 | 8481 |
| 8482 TEARDOWN(); | 8482 TEARDOWN(); |
| 8483 } | 8483 } |
| 8484 | 8484 |
| 8485 | 8485 |
| 8486 TEST(push_pop_jssp_mixed_methods_64) { | 8486 TEST(push_pop_jssp_mixed_methods_64) { |
| 8487 INIT_V8(); | 8487 INIT_V8(); |
| 8488 for (int claim = 0; claim <= 8; claim++) { | 8488 for (int claim = 0; claim <= 8; claim++) { |
| 8489 PushPopJsspMixedMethodsHelper(claim, kXRegSize); | 8489 PushPopJsspMixedMethodsHelper(claim, kXRegSizeInBits); |
| 8490 } | 8490 } |
| 8491 } | 8491 } |
| 8492 | 8492 |
| 8493 | 8493 |
| 8494 TEST(push_pop_jssp_mixed_methods_32) { | 8494 TEST(push_pop_jssp_mixed_methods_32) { |
| 8495 INIT_V8(); | 8495 INIT_V8(); |
| 8496 for (int claim = 0; claim <= 8; claim++) { | 8496 for (int claim = 0; claim <= 8; claim++) { |
| 8497 PushPopJsspMixedMethodsHelper(claim, kWRegSize); | 8497 PushPopJsspMixedMethodsHelper(claim, kWRegSizeInBits); |
| 8498 } | 8498 } |
| 8499 } | 8499 } |
| 8500 | 8500 |
| 8501 | 8501 |
| 8502 // Push and pop data using overlapping X- and W-sized quantities. | 8502 // Push and pop data using overlapping X- and W-sized quantities. |
| 8503 static void PushPopJsspWXOverlapHelper(int reg_count, int claim) { | 8503 static void PushPopJsspWXOverlapHelper(int reg_count, int claim) { |
| 8504 // This test emits rather a lot of code. | 8504 // This test emits rather a lot of code. |
| 8505 SETUP_SIZE(BUF_SIZE * 2); | 8505 SETUP_SIZE(BUF_SIZE * 2); |
| 8506 | 8506 |
| 8507 // Work out which registers to use, based on reg_size. | 8507 // Work out which registers to use, based on reg_size. |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8626 } else { | 8626 } else { |
| 8627 stack[active_w_slots++] = literal_base_hi * i; | 8627 stack[active_w_slots++] = literal_base_hi * i; |
| 8628 stack[active_w_slots++] = literal_base_lo * i; | 8628 stack[active_w_slots++] = literal_base_lo * i; |
| 8629 } | 8629 } |
| 8630 } | 8630 } |
| 8631 } | 8631 } |
| 8632 } | 8632 } |
| 8633 // Because we were pushing several registers at a time, we probably pushed | 8633 // Because we were pushing several registers at a time, we probably pushed |
| 8634 // more than we needed to. | 8634 // more than we needed to. |
| 8635 if (active_w_slots > requested_w_slots) { | 8635 if (active_w_slots > requested_w_slots) { |
| 8636 __ Drop(active_w_slots - requested_w_slots, kWRegSizeInBytes); | 8636 __ Drop(active_w_slots - requested_w_slots, kWRegSize); |
| 8637 // Bump the number of active W-sized slots back to where it should be, | 8637 // Bump the number of active W-sized slots back to where it should be, |
| 8638 // and fill the empty space with a dummy value. | 8638 // and fill the empty space with a dummy value. |
| 8639 do { | 8639 do { |
| 8640 stack[active_w_slots--] = 0xdeadbeef; | 8640 stack[active_w_slots--] = 0xdeadbeef; |
| 8641 } while (active_w_slots > requested_w_slots); | 8641 } while (active_w_slots > requested_w_slots); |
| 8642 } | 8642 } |
| 8643 | 8643 |
| 8644 // ---- Pop ---- | 8644 // ---- Pop ---- |
| 8645 | 8645 |
| 8646 Clobber(&masm, list); | 8646 Clobber(&masm, list); |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8841 __ Mov(w4, 0x12340004); | 8841 __ Mov(w4, 0x12340004); |
| 8842 __ Mov(w5, 0x12340005); | 8842 __ Mov(w5, 0x12340005); |
| 8843 __ Mov(w6, 0x12340006); | 8843 __ Mov(w6, 0x12340006); |
| 8844 __ Fmov(d0, 123400.0); | 8844 __ Fmov(d0, 123400.0); |
| 8845 __ Fmov(d1, 123401.0); | 8845 __ Fmov(d1, 123401.0); |
| 8846 __ Fmov(s2, 123402.0); | 8846 __ Fmov(s2, 123402.0); |
| 8847 | 8847 |
| 8848 // Actually push them. | 8848 // Actually push them. |
| 8849 queue.PushQueued(); | 8849 queue.PushQueued(); |
| 8850 | 8850 |
| 8851 Clobber(&masm, CPURegList(CPURegister::kRegister, kXRegSize, 0, 6)); | 8851 Clobber(&masm, CPURegList(CPURegister::kRegister, kXRegSizeInBits, 0, 6)); |
| 8852 Clobber(&masm, CPURegList(CPURegister::kFPRegister, kDRegSize, 0, 2)); | 8852 Clobber(&masm, CPURegList(CPURegister::kFPRegister, kDRegSizeInBits, 0, 2)); |
| 8853 | 8853 |
| 8854 // Pop them conventionally. | 8854 // Pop them conventionally. |
| 8855 __ Pop(s2); | 8855 __ Pop(s2); |
| 8856 __ Pop(d1, d0); | 8856 __ Pop(d1, d0); |
| 8857 __ Pop(w6, w5, w4); | 8857 __ Pop(w6, w5, w4); |
| 8858 __ Pop(x3, x2, x1, x0); | 8858 __ Pop(x3, x2, x1, x0); |
| 8859 | 8859 |
| 8860 __ Mov(csp, __ StackPointer()); | 8860 __ Mov(csp, __ StackPointer()); |
| 8861 __ SetStackPointer(csp); | 8861 __ SetStackPointer(csp); |
| 8862 | 8862 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8919 | 8919 |
| 8920 queue.Queue(w6); | 8920 queue.Queue(w6); |
| 8921 queue.Queue(w5); | 8921 queue.Queue(w5); |
| 8922 queue.Queue(w4); | 8922 queue.Queue(w4); |
| 8923 | 8923 |
| 8924 queue.Queue(x3); | 8924 queue.Queue(x3); |
| 8925 queue.Queue(x2); | 8925 queue.Queue(x2); |
| 8926 queue.Queue(x1); | 8926 queue.Queue(x1); |
| 8927 queue.Queue(x0); | 8927 queue.Queue(x0); |
| 8928 | 8928 |
| 8929 Clobber(&masm, CPURegList(CPURegister::kRegister, kXRegSize, 0, 6)); | 8929 Clobber(&masm, CPURegList(CPURegister::kRegister, kXRegSizeInBits, 0, 6)); |
| 8930 Clobber(&masm, CPURegList(CPURegister::kFPRegister, kDRegSize, 0, 2)); | 8930 Clobber(&masm, CPURegList(CPURegister::kFPRegister, kDRegSizeInBits, 0, 2)); |
| 8931 | 8931 |
| 8932 // Actually pop them. | 8932 // Actually pop them. |
| 8933 queue.PopQueued(); | 8933 queue.PopQueued(); |
| 8934 | 8934 |
| 8935 __ Mov(csp, __ StackPointer()); | 8935 __ Mov(csp, __ StackPointer()); |
| 8936 __ SetStackPointer(csp); | 8936 __ SetStackPointer(csp); |
| 8937 | 8937 |
| 8938 END(); | 8938 END(); |
| 8939 | 8939 |
| 8940 RUN(); | 8940 RUN(); |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9412 } | 9412 } |
| 9413 | 9413 |
| 9414 | 9414 |
| 9415 TEST(cpureglist_utils_empty) { | 9415 TEST(cpureglist_utils_empty) { |
| 9416 // This test doesn't generate any code, but it verifies the behaviour of | 9416 // This test doesn't generate any code, but it verifies the behaviour of |
| 9417 // the CPURegList utility methods. | 9417 // the CPURegList utility methods. |
| 9418 | 9418 |
| 9419 // Test an empty list. | 9419 // Test an empty list. |
| 9420 // Empty lists can have type and size properties. Check that we can create | 9420 // Empty lists can have type and size properties. Check that we can create |
| 9421 // them, and that they are empty. | 9421 // them, and that they are empty. |
| 9422 CPURegList reg32(CPURegister::kRegister, kWRegSize, 0); | 9422 CPURegList reg32(CPURegister::kRegister, kWRegSizeInBits, 0); |
| 9423 CPURegList reg64(CPURegister::kRegister, kXRegSize, 0); | 9423 CPURegList reg64(CPURegister::kRegister, kXRegSizeInBits, 0); |
| 9424 CPURegList fpreg32(CPURegister::kFPRegister, kSRegSize, 0); | 9424 CPURegList fpreg32(CPURegister::kFPRegister, kSRegSizeInBits, 0); |
| 9425 CPURegList fpreg64(CPURegister::kFPRegister, kDRegSize, 0); | 9425 CPURegList fpreg64(CPURegister::kFPRegister, kDRegSizeInBits, 0); |
| 9426 | 9426 |
| 9427 CHECK(reg32.IsEmpty()); | 9427 CHECK(reg32.IsEmpty()); |
| 9428 CHECK(reg64.IsEmpty()); | 9428 CHECK(reg64.IsEmpty()); |
| 9429 CHECK(fpreg32.IsEmpty()); | 9429 CHECK(fpreg32.IsEmpty()); |
| 9430 CHECK(fpreg64.IsEmpty()); | 9430 CHECK(fpreg64.IsEmpty()); |
| 9431 | 9431 |
| 9432 CHECK(reg32.PopLowestIndex().IsNone()); | 9432 CHECK(reg32.PopLowestIndex().IsNone()); |
| 9433 CHECK(reg64.PopLowestIndex().IsNone()); | 9433 CHECK(reg64.PopLowestIndex().IsNone()); |
| 9434 CHECK(fpreg32.PopLowestIndex().IsNone()); | 9434 CHECK(fpreg32.PopLowestIndex().IsNone()); |
| 9435 CHECK(fpreg64.PopLowestIndex().IsNone()); | 9435 CHECK(fpreg64.PopLowestIndex().IsNone()); |
| (...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10023 AbsHelperX(-42); | 10023 AbsHelperX(-42); |
| 10024 AbsHelperX(kXMinInt); | 10024 AbsHelperX(kXMinInt); |
| 10025 AbsHelperX(kXMaxInt); | 10025 AbsHelperX(kXMaxInt); |
| 10026 | 10026 |
| 10027 AbsHelperW(0); | 10027 AbsHelperW(0); |
| 10028 AbsHelperW(42); | 10028 AbsHelperW(42); |
| 10029 AbsHelperW(-42); | 10029 AbsHelperW(-42); |
| 10030 AbsHelperW(kWMinInt); | 10030 AbsHelperW(kWMinInt); |
| 10031 AbsHelperW(kWMaxInt); | 10031 AbsHelperW(kWMaxInt); |
| 10032 } | 10032 } |
| OLD | NEW |