| /* |
| * This file is part of the Jikes RVM project (http://jikesrvm.org). |
| * |
| * This file is licensed to You under the Common Public License (CPL); |
| * You may not use this file except in compliance with the License. You |
| * may obtain a copy of the License at |
| * |
| * http://www.opensource.org/licenses/cpl1.0.php |
| * |
| * See the COPYRIGHT.txt file distributed with this work for information |
| * regarding copyright ownership. |
| */ |
| package org.vmmagic.pragma; |
| |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.Target; |
| import java.lang.annotation.RetentionPolicy; |
| import java.lang.annotation.ElementType; |
| import org.vmmagic.Pragma; |
| |
| /** |
| * This pragma indicates that a particular method should always be inlined |
| * by the optimizing compiler. |
| */ |
| @Retention(RetentionPolicy.RUNTIME) |
| @Target(ElementType.METHOD) |
| @Pragma |
| public @interface Inline { |
| /** |
| * Enumeration defining when to inline |
| */ |
| public enum When { |
| /** |
| * Always inline, regardless of arguments |
| */ |
| Always, |
| /** |
| * Inline when all the arguments are constants |
| */ |
| AllArgumentsAreConstant, |
| /** |
| * Inline when the specified arguments are constants |
| */ |
| ArgumentsAreConstant, |
| /** |
| * Inline when the VM is built without Assertions (VM.VerifyAssertions == false). |
| * Note: It would be nicer to have the more general ExpressionIsTrue annotation, |
| * but the argument expression to the annotation is restricted to be a fairly |
| * trivial constant, and that isn't enough to handle how VM.VERIFY_ASSERTIONS |
| * is defined in MMTk. |
| */ |
| AssertionsDisabled |
| } |
| /** |
| * When to inline, default When.Always |
| */ |
| When value() default When.Always; |
| /** |
| * Arguments that must be constant to cause inlining. NB for static methods 0 |
| * is the first argument whilst for virtual methods 0 is this |
| */ |
| int[] arguments() default {}; |
| } |