/*
* Copyright ( C ) 2020 The Android Open Source Project
*
* Licensed under the Apache License , Version 2 . 0 ( the " License " ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an " AS IS " BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
*/
public class Main {
Object field;
/// CHECK-START: java.lang.Object Main.testGetField() builder (after)
/// CHECK: <<This:l\d+>> ParameterValue
/// CHECK: InstanceFieldGet [<<This>>] field_name:Main.field
/// CHECK-START-ARM: java.lang.Object Main.testGetField() disassembly (after)
/// CHECK-IF: os.environ.get('ART_HEAP_POISONING') == 'true'
/// CHECK-IF: os.environ.get('ART_READ_BARRIER_TYPE') != 'TABLELOOKUP'
/// CHECK: <<This:l\d+>> ParameterValue
/// CHECK: <<Ref:l\d+>> InstanceFieldGet [<<This>>] field_name:Main.field
/// CHECK: ldr <<RefReg:r([0-8]|10|11)>>, [r1, #8]
/// CHECK: rsbs <<RefReg>>, #0
/// CHECK: Return [<<Ref>>]
/// CHECK-FI:
/// CHECK-ELSE:
/// CHECK-NOT: rsbs {{r\d+}}, #0
/// CHECK-FI:
/// CHECK-START-ARM64: java.lang.Object Main.testGetField() disassembly (after)
/// CHECK-IF: os.environ.get('ART_HEAP_POISONING') == 'true'
/// CHECK-IF: os.environ.get('ART_READ_BARRIER_TYPE') != 'TABLELOOKUP'
/// CHECK: <<This:l\d+>> ParameterValue
/// CHECK: <<Ref:l\d+>> InstanceFieldGet [<<This>>] field_name:Main.field
/// CHECK: ldr w0, [x1, #8]
/// CHECK: neg w0, w0
/// CHECK: Return [<<Ref>>]
/// CHECK: ret
/// CHECK-FI:
/// CHECK-ELSE:
/// CHECK-NOT: neg {{w\d+}}, {{w\d+}}
/// CHECK-FI:
/// CHECK-START-X86: java.lang.Object Main.testGetField() disassembly (after)
/// CHECK-IF: os.environ.get('ART_HEAP_POISONING') == 'true'
/// CHECK-IF: os.environ.get('ART_READ_BARRIER_TYPE') != 'TABLELOOKUP'
/// CHECK: <<This:l\d+>> ParameterValue
/// CHECK: <<Ref:l\d+>> InstanceFieldGet [<<This>>] field_name:Main.field
/// CHECK: mov eax, [ecx + 8]
/// CHECK: neg eax
/// CHECK: Return [<<Ref>>]
/// CHECK: ret
/// CHECK-FI:
/// CHECK-ELSE:
/// CHECK-NOT: neg {{[a-z]+}}
/// CHECK-FI:
/// CHECK-START-X86_64: java.lang.Object Main.testGetField() disassembly (after)
/// CHECK-IF: os.environ.get('ART_HEAP_POISONING') == 'true'
/// CHECK-IF: os.environ.get('ART_READ_BARRIER_TYPE') != 'TABLELOOKUP'
/// CHECK: <<This:l\d+>> ParameterValue
/// CHECK: <<Ref:l\d+>> InstanceFieldGet [<<This>>] field_name:Main.field
/// CHECK: mov eax, [rsi + 8]
/// CHECK: neg eax
/// CHECK: Return [<<Ref>>]
/// CHECK: ret
/// CHECK-FI:
/// CHECK-ELSE:
/// CHECK-NOT: neg {{[a-z]+}}
/// CHECK-FI:
Object testGetField() {
return field;
}
/// CHECK-START: void Main.testSetField(java.lang.Object) builder (after)
/// CHECK: <<This:l\d+>> ParameterValue
/// CHECK: <<Arg:l\d+>> ParameterValue
/// CHECK: InstanceFieldSet [<<This>>,<<Arg>>] field_name:Main.field
/// CHECK-START-ARM: void Main.testSetField(java.lang.Object) disassembly (after)
/// CHECK-IF: os.environ.get('ART_HEAP_POISONING') == 'true'
/// CHECK-IF: os.environ.get('ART_READ_BARRIER_TYPE') != 'TABLELOOKUP'
/// CHECK: <<This:l\d+>> ParameterValue
/// CHECK: <<Arg:l\d+>> ParameterValue
/// CHECK: InstanceFieldSet [<<This>>,<<Arg>>] field_name:Main.field
/// CHECK-NEXT: mov <<Temp:r([0-8]|10|11)>>, r2
/// CHECK-NEXT: rsbs <<Temp>>, #0
/// CHECK-NEXT: str <<Temp>>, [r1, #8]
/// CHECK: ReturnVoid
/// CHECK-NEXT: bx lr
/// CHECK-FI:
/// CHECK-ELSE:
/// CHECK-NOT: rsbs {{r\d+}}, #0
/// CHECK-FI:
/// CHECK-START-ARM64: void Main.testSetField(java.lang.Object) disassembly (after)
/// CHECK-IF: os.environ.get('ART_HEAP_POISONING') == 'true'
/// CHECK-IF: os.environ.get('ART_READ_BARRIER_TYPE') != 'TABLELOOKUP'
/// CHECK: <<This:l\d+>> ParameterValue
/// CHECK: <<Arg:l\d+>> ParameterValue
/// CHECK: InstanceFieldSet [<<This>>,<<Arg>>] field_name:Main.field
/// CHECK-NEXT: mov <<Temp:w1[67]>>, w2
/// CHECK-NEXT: neg <<Temp>>, <<Temp>>
/// CHECK-NEXT: str <<Temp>>, [x1, #8]
/// CHECK: ReturnVoid
/// CHECK-NEXT: ret
/// CHECK-FI:
/// CHECK-ELSE:
/// CHECK-NOT: neg {{w\d+}}, {{w\d+}}
/// CHECK-FI:
/// CHECK-START-X86: void Main.testSetField(java.lang.Object) disassembly (after)
/// CHECK-IF: os.environ.get('ART_HEAP_POISONING') == 'true'
/// CHECK-IF: os.environ.get('ART_READ_BARRIER_TYPE') != 'TABLELOOKUP'
/// CHECK: <<This:l\d+>> ParameterValue
/// CHECK: <<Arg:l\d+>> ParameterValue
/// CHECK: ParallelMove
/// CHECK-NEXT: mov eax, ecx
/// CHECK: InstanceFieldSet [<<This>>,<<Arg>>] field_name:Main.field
/// CHECK-NEXT: mov <<Temp:e([acdb]x|bp|si|di)>>, edx
/// CHECK-NEXT: neg <<Temp>>
/// CHECK-NEXT: mov [eax + 8], <<Temp>>
/// CHECK: ReturnVoid
/// CHECK-NEXT: ret
/// CHECK-FI:
/// CHECK-ELSE:
/// CHECK-NOT: neg {{[a-z]+}}
/// CHECK-FI:
/// CHECK-START-X86_64: void Main.testSetField(java.lang.Object) disassembly (after)
/// CHECK-IF: os.environ.get('ART_HEAP_POISONING') == 'true'
/// CHECK-IF: os.environ.get('ART_READ_BARRIER_TYPE') != 'TABLELOOKUP'
/// CHECK: <<This:l\d+>> ParameterValue
/// CHECK: <<Arg:l\d+>> ParameterValue
/// CHECK: InstanceFieldSet [<<This>>,<<Arg>>] field_name:Main.field
/// CHECK-NEXT: mov <<Temp:e([acdb]x|bp|si|di)>>, edx
/// CHECK-NEXT: neg <<Temp>>
/// CHECK-NEXT: mov [rsi + 8], <<Temp>>
/// CHECK: ReturnVoid
/// CHECK-NEXT: ret
/// CHECK-FI:
/// CHECK-ELSE:
/// CHECK-NOT: neg {{[a-z]+}}
/// CHECK-FI:
void testSetField(Object o) {
field = o;
}
public static void main(String[] args) {
Main m = new Main();
Object o = m.testGetField();
m.testSetField(o);
System.out.println("passed" );
}
}
Messung V0.5 in Prozent C=86 H=96 G=90
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-29)
¤
*© Formatika GbR, Deutschland