comparison src/cpu/ppc/vm/macroAssembler_ppc.hpp @ 17804:fd1b9f02cc91

8036976: PPC64: implement the template interpreter Reviewed-by: kvn, coleenp Contributed-by: axel.siebenborn@sap.com, martin.doerr@sap.com
author goetz
date Mon, 10 Mar 2014 12:58:02 +0100
parents 31e80afe3fed
children 92aa6797d639 71a71b0bc844
comparison
equal deleted inserted replaced
17803:31e80afe3fed 17804:fd1b9f02cc91
1 /* 1 /*
2 * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
3 * Copyright 2012, 2013 SAP AG. All rights reserved. 3 * Copyright 2012, 2014 SAP AG. All rights reserved.
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * 5 *
6 * This code is free software; you can redistribute it and/or modify it 6 * This code is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 only, as 7 * under the terms of the GNU General Public License version 2 only, as
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
564 // Check accessed object for null. Use SIGTRAP-based null checks on AIX. 564 // Check accessed object for null. Use SIGTRAP-based null checks on AIX.
565 inline void load_with_trap_null_check(Register d, int si16, Register s1); 565 inline void load_with_trap_null_check(Register d, int si16, Register s1);
566 566
567 // Load heap oop and decompress. Loaded oop may not be null. 567 // Load heap oop and decompress. Loaded oop may not be null.
568 inline void load_heap_oop_not_null(Register d, RegisterOrConstant offs, Register s1 = noreg); 568 inline void load_heap_oop_not_null(Register d, RegisterOrConstant offs, Register s1 = noreg);
569 inline void store_heap_oop_not_null(Register d, RegisterOrConstant offs, Register s1,
570 /*specify if d must stay uncompressed*/ Register tmp = noreg);
569 571
570 // Null allowed. 572 // Null allowed.
571 inline void load_heap_oop(Register d, RegisterOrConstant offs, Register s1 = noreg); 573 inline void load_heap_oop(Register d, RegisterOrConstant offs, Register s1 = noreg);
572 574
573 // Encode/decode heap oop. Oop may not be null, else en/decoding goes wrong. 575 // Encode/decode heap oop. Oop may not be null, else en/decoding goes wrong.
574 inline void encode_heap_oop_not_null(Register d); 576 inline Register encode_heap_oop_not_null(Register d, Register src = noreg);
575 inline void decode_heap_oop_not_null(Register d); 577 inline void decode_heap_oop_not_null(Register d);
576 578
577 // Null allowed. 579 // Null allowed.
578 inline void decode_heap_oop(Register d); 580 inline void decode_heap_oop(Register d);
579 581
580 // Load/Store klass oop from klass field. Compress. 582 // Load/Store klass oop from klass field. Compress.
581 void load_klass(Register dst, Register src); 583 void load_klass(Register dst, Register src);
582 void load_klass_with_trap_null_check(Register dst, Register src); 584 void load_klass_with_trap_null_check(Register dst, Register src);
583 void store_klass(Register dst_oop, Register klass, Register tmp = R0); 585 void store_klass(Register dst_oop, Register klass, Register tmp = R0);
586 void store_klass_gap(Register dst_oop, Register val = noreg); // Will store 0 if val not specified.
584 static int instr_size_for_decode_klass_not_null(); 587 static int instr_size_for_decode_klass_not_null();
585 void decode_klass_not_null(Register dst, Register src = noreg); 588 void decode_klass_not_null(Register dst, Register src = noreg);
586 void encode_klass_not_null(Register dst, Register src = noreg); 589 void encode_klass_not_null(Register dst, Register src = noreg);
587 590
588 // Load common heap base into register. 591 // Load common heap base into register.
691 void should_not_reach_here() { stop(stop_shouldnotreachhere, "", -1); } 694 void should_not_reach_here() { stop(stop_shouldnotreachhere, "", -1); }
692 695
693 void zap_from_to(Register low, int before, Register high, int after, Register val, Register addr) PRODUCT_RETURN; 696 void zap_from_to(Register low, int before, Register high, int after, Register val, Register addr) PRODUCT_RETURN;
694 }; 697 };
695 698
699 // class SkipIfEqualZero:
700 //
701 // Instantiating this class will result in assembly code being output that will
702 // jump around any code emitted between the creation of the instance and it's
703 // automatic destruction at the end of a scope block, depending on the value of
704 // the flag passed to the constructor, which will be checked at run-time.
705 class SkipIfEqualZero : public StackObj {
706 private:
707 MacroAssembler* _masm;
708 Label _label;
709
710 public:
711 // 'Temp' is a temp register that this object can use (and trash).
712 explicit SkipIfEqualZero(MacroAssembler*, Register temp, const bool* flag_addr);
713 ~SkipIfEqualZero();
714 };
715
696 #endif // CPU_PPC_VM_MACROASSEMBLER_PPC_HPP 716 #endif // CPU_PPC_VM_MACROASSEMBLER_PPC_HPP