Mercurial > hg > graal-compiler
changeset 19992:053c1f9daed1
support disassembling a subrange of a bytecode method
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Sun, 22 Mar 2015 16:33:32 +0100 |
parents | 4187aa9d6a10 |
children | bca124e6ad58 |
files | graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeDisassembler.java |
diffstat | 1 files changed, 16 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeDisassembler.java Sun Mar 22 12:30:26 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeDisassembler.java Sun Mar 22 16:33:32 2015 +0100 @@ -51,6 +51,15 @@ * @return {@code null} if {@code method} has no bytecode (e.g., it is native or abstract) */ public String disassemble(ResolvedJavaMethod method) { + return disassemble(method, 0, Integer.MAX_VALUE); + } + + /** + * Disassembles the bytecode of a given method in a {@code javap}-like format. + * + * @return {@code null} if {@code method} has no bytecode (e.g., it is native or abstract) + */ + public String disassemble(ResolvedJavaMethod method, int startBci, int endBci) { if (method.getCode() == null) { return null; } @@ -60,10 +69,11 @@ int opcode = stream.currentBC(); while (opcode != Bytecodes.END) { int bci = stream.currentBCI(); - String mnemonic = Bytecodes.nameOf(opcode); - buf.append(String.format("%4d: %-14s", bci, mnemonic)); - if (stream.nextBCI() > bci + 1) { - // @formatter:off + if (bci >= startBci && bci <= endBci) { + String mnemonic = Bytecodes.nameOf(opcode); + buf.append(String.format("%4d: %-14s", bci, mnemonic)); + if (stream.nextBCI() > bci + 1) { + // @formatter:off switch (opcode) { case BIPUSH : buf.append(stream.readByte()); break; case SIPUSH : buf.append(stream.readShort()); break; @@ -211,8 +221,9 @@ } } // @formatter:on + } + buf.append(String.format("%n")); } - buf.append(String.format("%n")); stream.next(); opcode = stream.currentBC(); }