Mercurial > hg > truffle
comparison src/share/vm/c1/c1_LIRGenerator.cpp @ 2167:aa4b04b68652
Merge
author | never |
---|---|
date | Fri, 21 Jan 2011 13:03:13 -0800 |
parents | e31d8c656c5b 403dc4c1d7f5 |
children | d25d4ca69222 425688247f3d |
comparison
equal
deleted
inserted
replaced
2165:a7367756024b | 2167:aa4b04b68652 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2005, 2011, 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. |
2739 __ branch(lir_cond_equal, T_INT, overflow); | 2739 __ branch(lir_cond_equal, T_INT, overflow); |
2740 __ branch_destination(overflow->continuation()); | 2740 __ branch_destination(overflow->continuation()); |
2741 } | 2741 } |
2742 } | 2742 } |
2743 | 2743 |
2744 void LIRGenerator::do_RuntimeCall(RuntimeCall* x) { | |
2745 LIR_OprList* args = new LIR_OprList(x->number_of_arguments()); | |
2746 BasicTypeList* signature = new BasicTypeList(x->number_of_arguments()); | |
2747 | |
2748 if (x->pass_thread()) { | |
2749 signature->append(T_ADDRESS); | |
2750 args->append(getThreadPointer()); | |
2751 } | |
2752 | |
2753 for (int i = 0; i < x->number_of_arguments(); i++) { | |
2754 Value a = x->argument_at(i); | |
2755 LIRItem* item = new LIRItem(a, this); | |
2756 item->load_item(); | |
2757 args->append(item->result()); | |
2758 signature->append(as_BasicType(a->type())); | |
2759 } | |
2760 | |
2761 LIR_Opr result = call_runtime(signature, args, x->entry(), x->type(), NULL); | |
2762 if (x->type() == voidType) { | |
2763 set_no_result(x); | |
2764 } else { | |
2765 __ move(result, rlock_result(x)); | |
2766 } | |
2767 } | |
2768 | |
2744 LIR_Opr LIRGenerator::call_runtime(Value arg1, address entry, ValueType* result_type, CodeEmitInfo* info) { | 2769 LIR_Opr LIRGenerator::call_runtime(Value arg1, address entry, ValueType* result_type, CodeEmitInfo* info) { |
2745 LIRItemList args(1); | 2770 LIRItemList args(1); |
2746 LIRItem value(arg1, this); | 2771 LIRItem value(arg1, this); |
2747 args.append(&value); | 2772 args.append(&value); |
2748 BasicTypeList signature; | 2773 BasicTypeList signature; |