assembler_sparc.cpp (986:62001a362ce9) assembler_sparc.cpp (1006:dcf03e02b020)
1/*
2 * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation.
8 *

--- 2617 unchanged lines hidden (view full) ---

2626
2627
2628void MacroAssembler::regcon_inc_ptr( RegisterOrConstant& dest, RegisterOrConstant src, Register temp ) {
2629 assert(dest.register_or_noreg() != G0, "lost side effect");
2630 if ((src.is_constant() && src.as_constant() == 0) ||
2631 (src.is_register() && src.as_register() == G0)) {
2632 // do nothing
2633 } else if (dest.is_register()) {
1/*
2 * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation.
8 *

--- 2617 unchanged lines hidden (view full) ---

2626
2627
2628void MacroAssembler::regcon_inc_ptr( RegisterOrConstant& dest, RegisterOrConstant src, Register temp ) {
2629 assert(dest.register_or_noreg() != G0, "lost side effect");
2630 if ((src.is_constant() && src.as_constant() == 0) ||
2631 (src.is_register() && src.as_register() == G0)) {
2632 // do nothing
2633 } else if (dest.is_register()) {
2634 add(dest.as_register(), ensure_rs2(src, temp), dest.as_register());
2634 add(dest.as_register(), ensure_simm13_or_reg(src, temp), dest.as_register());
2635 } else if (src.is_constant()) {
2636 intptr_t res = dest.as_constant() + src.as_constant();
2637 dest = RegisterOrConstant(res); // side effect seen by caller
2638 } else {
2639 assert(temp != noreg, "cannot handle constant += register");
2635 } else if (src.is_constant()) {
2636 intptr_t res = dest.as_constant() + src.as_constant();
2637 dest = RegisterOrConstant(res); // side effect seen by caller
2638 } else {
2639 assert(temp != noreg, "cannot handle constant += register");
2640 add(src.as_register(), ensure_rs2(dest, temp), temp);
2640 add(src.as_register(), ensure_simm13_or_reg(dest, temp), temp);
2641 dest = RegisterOrConstant(temp); // side effect seen by caller
2642 }
2643}
2644
2645void MacroAssembler::regcon_sll_ptr( RegisterOrConstant& dest, RegisterOrConstant src, Register temp ) {
2646 assert(dest.register_or_noreg() != G0, "lost side effect");
2647 if (!is_simm13(src.constant_or_zero()))
2648 src = (src.as_constant() & 0xFF);

--- 56 unchanged lines hidden (view full) ---

2705 and3(scan_temp, -round_to_unit, scan_temp);
2706 }
2707 add(recv_klass, scan_temp, scan_temp);
2708
2709 // Adjust recv_klass by scaled itable_index, so we can free itable_index.
2710 RegisterOrConstant itable_offset = itable_index;
2711 regcon_sll_ptr(itable_offset, exact_log2(itableMethodEntry::size() * wordSize));
2712 regcon_inc_ptr(itable_offset, itableMethodEntry::method_offset_in_bytes());
2641 dest = RegisterOrConstant(temp); // side effect seen by caller
2642 }
2643}
2644
2645void MacroAssembler::regcon_sll_ptr( RegisterOrConstant& dest, RegisterOrConstant src, Register temp ) {
2646 assert(dest.register_or_noreg() != G0, "lost side effect");
2647 if (!is_simm13(src.constant_or_zero()))
2648 src = (src.as_constant() & 0xFF);

--- 56 unchanged lines hidden (view full) ---

2705 and3(scan_temp, -round_to_unit, scan_temp);
2706 }
2707 add(recv_klass, scan_temp, scan_temp);
2708
2709 // Adjust recv_klass by scaled itable_index, so we can free itable_index.
2710 RegisterOrConstant itable_offset = itable_index;
2711 regcon_sll_ptr(itable_offset, exact_log2(itableMethodEntry::size() * wordSize));
2712 regcon_inc_ptr(itable_offset, itableMethodEntry::method_offset_in_bytes());
2713 add(recv_klass, ensure_rs2(itable_offset, sethi_temp), recv_klass);
2713 add(recv_klass, ensure_simm13_or_reg(itable_offset, sethi_temp), recv_klass);
2714
2715 // for (scan = klass->itable(); scan->interface() != NULL; scan += scan_step) {
2716 // if (scan->interface() == intf) {
2717 // result = (klass + scan->offset() + itable_index);
2718 // }
2719 // }
2720 Label search, found_method;
2721

--- 2004 unchanged lines hidden ---
2714
2715 // for (scan = klass->itable(); scan->interface() != NULL; scan += scan_step) {
2716 // if (scan->interface() == intf) {
2717 // result = (klass + scan->offset() + itable_index);
2718 // }
2719 // }
2720 Label search, found_method;
2721

--- 2004 unchanged lines hidden ---