Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(747)

Side by Side Diff: test/cctest/test-assembler-mips64.cc

Issue 1235883004: MIPS64: Fix BlockTrampolinePoolFor() to emit trampoline before blocking, if needed. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/mips64/assembler-mips64-inl.h ('k') | test/cctest/test-macro-assembler-mips64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 3064 matching lines...) Expand 10 before | Expand all | Expand 10 after
3075 Label labels[kNumCases]; 3075 Label labels[kNumCases];
3076 3076
3077 __ daddiu(sp, sp, -8); 3077 __ daddiu(sp, sp, -8);
3078 __ sd(ra, MemOperand(sp)); 3078 __ sd(ra, MemOperand(sp));
3079 if ((assm.pc_offset() & 7) == 0) { 3079 if ((assm.pc_offset() & 7) == 0) {
3080 __ nop(); 3080 __ nop();
3081 } 3081 }
3082 3082
3083 Label done; 3083 Label done;
3084 { 3084 {
3085 __ BlockTrampolinePoolFor(kNumCases * 2 + 7);
3085 PredictableCodeSizeScope predictable( 3086 PredictableCodeSizeScope predictable(
3086 &assm, (kNumCases * 2 + 7) * Assembler::kInstrSize); 3087 &assm, (kNumCases * 2 + 7) * Assembler::kInstrSize);
3087 Label here; 3088 Label here;
3088 3089
3089 __ bal(&here); 3090 __ bal(&here);
3090 __ nop(); 3091 __ nop();
3091 __ bind(&here); 3092 __ bind(&here);
3092 __ dsll(at, a0, 3); 3093 __ dsll(at, a0, 3);
3093 __ daddu(at, at, ra); 3094 __ daddu(at, at, ra);
3094 __ ld(at, MemOperand(at, 5 * Assembler::kInstrSize)); 3095 __ ld(at, MemOperand(at, 5 * Assembler::kInstrSize));
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
3155 __ ori(v0, v0, values[i] & 0xffff); 3156 __ ori(v0, v0, values[i] & 0xffff);
3156 __ b(&done); 3157 __ b(&done);
3157 __ nop(); 3158 __ nop();
3158 } 3159 }
3159 3160
3160 if ((assm.pc_offset() & 7) == 0) { 3161 if ((assm.pc_offset() & 7) == 0) {
3161 __ nop(); 3162 __ nop();
3162 } 3163 }
3163 __ bind(&dispatch); 3164 __ bind(&dispatch);
3164 { 3165 {
3166 __ BlockTrampolinePoolFor(kNumCases * 2 + 7);
3165 PredictableCodeSizeScope predictable( 3167 PredictableCodeSizeScope predictable(
3166 &assm, (kNumCases * 2 + 7) * Assembler::kInstrSize); 3168 &assm, (kNumCases * 2 + 7) * Assembler::kInstrSize);
3167 Label here; 3169 Label here;
3168 3170
3169 __ bal(&here); 3171 __ bal(&here);
3170 __ nop(); 3172 __ nop();
3171 __ bind(&here); 3173 __ bind(&here);
3172 __ dsll(at, a0, 3); 3174 __ dsll(at, a0, 3);
3173 __ daddu(at, at, ra); 3175 __ daddu(at, at, ra);
3174 __ ld(at, MemOperand(at, 5 * Assembler::kInstrSize)); 3176 __ ld(at, MemOperand(at, 5 * Assembler::kInstrSize));
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
3237 __ b(&done); 3239 __ b(&done);
3238 __ nop(); 3240 __ nop();
3239 } 3241 }
3240 3242
3241 __ stop("chk"); 3243 __ stop("chk");
3242 if ((assm.pc_offset() & 7) == 0) { 3244 if ((assm.pc_offset() & 7) == 0) {
3243 __ nop(); 3245 __ nop();
3244 } 3246 }
3245 __ bind(&dispatch); 3247 __ bind(&dispatch);
3246 { 3248 {
3249 __ BlockTrampolinePoolFor(kNumCases * 2 + 7);
3247 PredictableCodeSizeScope predictable( 3250 PredictableCodeSizeScope predictable(
3248 &assm, (kNumCases * 2 + 7) * Assembler::kInstrSize); 3251 &assm, (kNumCases * 2 + 7) * Assembler::kInstrSize);
3249 Label here; 3252 Label here;
3250 3253
3251 __ bal(&here); 3254 __ bal(&here);
3252 __ nop(); 3255 __ nop();
3253 __ bind(&here); 3256 __ bind(&here);
3254 __ dsll(at, a0, 3); 3257 __ dsll(at, a0, 3);
3255 __ daddu(at, at, ra); 3258 __ daddu(at, at, ra);
3256 __ ld(at, MemOperand(at, 5 * Assembler::kInstrSize)); 3259 __ ld(at, MemOperand(at, 5 * Assembler::kInstrSize));
(...skipping 2100 matching lines...) Expand 10 before | Expand all | Expand 10 after
5357 size_t nr_test_cases = sizeof(tc) / sizeof(TestCaseBalc); 5360 size_t nr_test_cases = sizeof(tc) / sizeof(TestCaseBalc);
5358 for (size_t i = 0; i < nr_test_cases; ++i) { 5361 for (size_t i = 0; i < nr_test_cases; ++i) {
5359 int64_t res = run_balc(tc[i].offset); 5362 int64_t res = run_balc(tc[i].offset);
5360 CHECK_EQ(tc[i].expected_res, res); 5363 CHECK_EQ(tc[i].expected_res, res);
5361 } 5364 }
5362 } 5365 }
5363 } 5366 }
5364 5367
5365 5368
5366 #undef __ 5369 #undef __
OLDNEW
« no previous file with comments | « src/mips64/assembler-mips64-inl.h ('k') | test/cctest/test-macro-assembler-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698