comparison src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp @ 23660:b5f3a471e646

Merge.
author Doug Simon <doug.simon@oracle.com>
date Wed, 01 Jun 2016 00:11:44 +0200
parents 32b682649973
children 0b85ccd62409
comparison
equal deleted inserted replaced
23411:d7cf78885a3a 23660:b5f3a471e646
1 /* 1 /*
2 * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
341 341
342 if (use_length && needs_range_check) { 342 if (use_length && needs_range_check) {
343 length.set_instruction(x->length()); 343 length.set_instruction(x->length());
344 length.load_item(); 344 length.load_item();
345 } 345 }
346 if (needs_store_check) { 346 if (needs_store_check || x->check_boolean()) {
347 value.load_item(); 347 value.load_item();
348 } else { 348 } else {
349 value.load_for_store(x->elt_type()); 349 value.load_for_store(x->elt_type());
350 } 350 }
351 351
386 if (obj_store) { 386 if (obj_store) {
387 // Needs GC write barriers. 387 // Needs GC write barriers.
388 pre_barrier(LIR_OprFact::address(array_addr), LIR_OprFact::illegalOpr /* pre_val */, 388 pre_barrier(LIR_OprFact::address(array_addr), LIR_OprFact::illegalOpr /* pre_val */,
389 true /* do_load */, false /* patch */, NULL); 389 true /* do_load */, false /* patch */, NULL);
390 } 390 }
391 __ move(value.result(), array_addr, null_check_info); 391 LIR_Opr result = maybe_mask_boolean(x, array.result(), value.result(), null_check_info);
392 __ move(result, array_addr, null_check_info);
392 if (obj_store) { 393 if (obj_store) {
393 // Precise card mark 394 // Precise card mark
394 post_barrier(LIR_OprFact::address(array_addr), value.result()); 395 post_barrier(LIR_OprFact::address(array_addr), value.result());
395 } 396 }
396 } 397 }