Mercurial > hg > graal-jvmci-8
changeset 22411:78c691145967
Support putting multiple constants next to each other in DataSection.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Mon, 10 Aug 2015 13:36:47 +0200 |
parents | 7dd034e68f2e |
children | e6e0113295ca |
files | jvmci/jdk.internal.jvmci.code/src/jdk/internal/jvmci/code/CodeCacheProvider.java jvmci/jdk.internal.jvmci.code/src/jdk/internal/jvmci/code/DataSection.java jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotCodeCacheProvider.java |
diffstat | 3 files changed, 29 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/jvmci/jdk.internal.jvmci.code/src/jdk/internal/jvmci/code/CodeCacheProvider.java Fri Aug 07 14:46:04 2015 +0200 +++ b/jvmci/jdk.internal.jvmci.code/src/jdk/internal/jvmci/code/CodeCacheProvider.java Mon Aug 10 13:36:47 2015 +0200 @@ -87,9 +87,11 @@ boolean needsDataPatch(JavaConstant constant); /** - * Create a {@link Data} item for a {@link Constant}, that can be used in a {@link DataPatch}. + * Create a {@link Data} item for one or more {@link Constant Constants}, that can be used in a + * {@link DataPatch}. If more than one {@link Constant} is given, then they are tightly packed + * into a single {@link Data} item. */ - Data createDataItem(Constant constant); + Data createDataItem(Constant... constants); /** * Gets a description of the target architecture.
--- a/jvmci/jdk.internal.jvmci.code/src/jdk/internal/jvmci/code/DataSection.java Fri Aug 07 14:46:04 2015 +0200 +++ b/jvmci/jdk.internal.jvmci.code/src/jdk/internal/jvmci/code/DataSection.java Mon Aug 10 13:36:47 2015 +0200 @@ -252,7 +252,7 @@ return dataItems.iterator(); } - private static int lcm(int x, int y) { + public static int lcm(int x, int y) { if (x == 0) { return y; } else if (y == 0) {
--- a/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotCodeCacheProvider.java Fri Aug 07 14:46:04 2015 +0200 +++ b/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/HotSpotCodeCacheProvider.java Mon Aug 10 13:36:47 2015 +0200 @@ -166,7 +166,7 @@ return constant instanceof HotSpotMetaspaceConstant; } - public Data createDataItem(Constant constant) { + private Data createSingleDataItem(Constant constant) { int size; DataBuilder builder; if (constant instanceof VMConstant) { @@ -213,6 +213,29 @@ return new Data(size, size, builder); } + public Data createDataItem(Constant... constants) { + assert constants.length > 0; + if (constants.length == 1) { + return createSingleDataItem(constants[0]); + } else { + DataBuilder[] builders = new DataBuilder[constants.length]; + int size = 0; + int alignment = 1; + for (int i = 0; i < constants.length; i++) { + Data data = createSingleDataItem(constants[i]); + size += data.getSize(); + builders[i] = data.getBuilder(); + alignment = DataSection.lcm(alignment, data.getAlignment()); + } + DataBuilder ret = (buffer, patches) -> { + for (DataBuilder b : builders) { + b.emit(buffer, patches); + } + }; + return new Data(alignment, size, ret); + } + } + @Override public TargetDescription getTarget() { return target;