src/cpu/mips/vm/templateTable_mips_64.cpp

changeset 6889
a1eb29ee98ab
parent 6888
b6a542947da3
child 6890
d911cc184106
equal deleted inserted replaced
6888:b6a542947da3 6889:a1eb29ee98ab
378 void TemplateTable::ldc2_w() { 378 void TemplateTable::ldc2_w() {
379 transition(vtos, vtos); 379 transition(vtos, vtos);
380 Label Long, Done; 380 Label Long, Done;
381 381
382 // get index in cpool 382 // get index in cpool
383 __ get_2_byte_integer_at_bcp(T2, AT, 1); 383 __ get_unsigned_2_byte_index_at_bcp(T2, 1);
384 __ huswap(T2);
385 384
386 __ get_cpool_and_tags(T3, T1); 385 __ get_cpool_and_tags(T3, T1);
387 386
388 const int base_offset = ConstantPool::header_size() * wordSize; 387 const int base_offset = ConstantPool::header_size() * wordSize;
389 const int tags_offset = Array<u1>::base_offset_in_bytes(); 388 const int tags_offset = Array<u1>::base_offset_in_bytes();
390 389
391 // get type in T1 390 // get type in T1
392 __ dadd(AT, T1, T2); 391 if (UseLoongsonISA && Assembler::is_simm(tags_offset, 8)) {
393 __ lb(T1, AT, tags_offset); 392 __ gslbx(T1, T1, T2, tags_offset);
393 } else {
394 __ dadd(AT, T1, T2);
395 __ lb(T1, AT, tags_offset);
396 }
394 397
395 __ daddiu(AT, T1, - JVM_CONSTANT_Double); 398 __ daddiu(AT, T1, - JVM_CONSTANT_Double);
396 __ bne(AT, R0, Long); 399 __ bne(AT, R0, Long);
397 __ delayed()->dsll(T2, T2, Address::times_8); 400 __ delayed()->dsll(T2, T2, Address::times_8);
401
398 // dtos 402 // dtos
399 __ daddu(AT, T3, T2); 403 if (UseLoongsonISA && Assembler::is_simm(base_offset, 8)) {
400 __ ldc1(FSF, AT, base_offset + 0 * wordSize); 404 __ gsldxc1(FSF, T3, T2, base_offset);
405 } else {
406 __ daddu(AT, T3, T2);
407 __ ldc1(FSF, AT, base_offset);
408 }
401 __ sdc1(FSF, SP, - 2 * wordSize); 409 __ sdc1(FSF, SP, - 2 * wordSize);
402 __ b(Done); 410 __ b(Done);
403 __ delayed()->daddi(SP, SP, - 2 * wordSize); 411 __ delayed()->daddi(SP, SP, - 2 * wordSize);
404 412
405 // ltos 413 // ltos
406 __ bind(Long); 414 __ bind(Long);
407 __ dadd(AT, T3, T2); 415 if (UseLoongsonISA && Assembler::is_simm(base_offset, 8)) {
408 __ ld(FSR, AT, base_offset + 0 * wordSize); 416 __ gsldx(FSR, T3, T2, base_offset);
417 } else {
418 __ dadd(AT, T3, T2);
419 __ ld(FSR, AT, base_offset);
420 }
409 __ push(ltos); 421 __ push(ltos);
410 422
411 __ bind(Done); 423 __ bind(Done);
412 } 424 }
413 425
487 // T2 : index 499 // T2 : index
488 void TemplateTable::lload() { 500 void TemplateTable::lload() {
489 transition(vtos, ltos); 501 transition(vtos, ltos);
490 locals_index(T2); 502 locals_index(T2);
491 __ ld(FSR, T2, -wordSize); 503 __ ld(FSR, T2, -wordSize);
492 __ ld(SSR, T2, 0);
493 } 504 }
494 505
495 // used register T2 506 // used register T2
496 // T2 : index 507 // T2 : index
497 void TemplateTable::fload() { 508 void TemplateTable::fload() {

mercurial