1 #!/bin/bash
2
3 javac -d . ../../../../../../make/jdk/src/classes/build/tools/spp/Spp.java
4
5 SPP=build.tools.spp.Spp
6
7 # Generates variable handle tests for objects and all primitive types
8 # This is likely to be a temporary testing approach as it may be more
9 # desirable to generate code using ASM which will allow more flexibility
10 # in the kinds of tests that are generated.
11
12 for type in boolean byte short char int long float double String Value
13 do
14 Type="$(tr '[:lower:]' '[:upper:]' <<< ${type:0:1})${type:1}"
15 args="-K$type -Dtype=$type -DType=$Type"
16
17 args="$args -KCAS"
18
19 case $type in
20 byte|short|char|int|long|float|double)
21 args="$args -KAtomicAdd"
22 ;;
23 esac
24
25 case $type in
26 boolean|byte|short|char|int|long)
27 args="$args -KBitwise"
28 ;;
29 esac
30
31 # Object = objects of identity or value class
32 # Value = value class
33 case $type in
34 String)
35 args="$args -KObject"
36 ;;
37 Value)
38 args="$args -KObject -KValue"
39 ;;
40 esac
41
42 wrong_primitive_type=boolean
43
44 case $type in
45 boolean)
46 value1=true
47 value2=false
48 value3=false
49 wrong_primitive_type=int
50 ;;
51 byte)
52 value1=(byte)0x01
53 value2=(byte)0x23
54 value3=(byte)0x45
55 ;;
56 short)
57 value1=(short)0x0123
58 value2=(short)0x4567
59 value3=(short)0x89AB
60 ;;
61 char)
62 value1=\'\\\\u0123\'
63 value2=\'\\\\u4567\'
64 value3=\'\\\\u89AB\'
65 ;;
66 int)
67 value1=0x01234567
68 value2=0x89ABCDEF
69 value3=0xCAFEBABE
70 ;;
71 long)
72 value1=0x0123456789ABCDEFL
73 value2=0xCAFEBABECAFEBABEL
74 value3=0xDEADBEEFDEADBEEFL
75 ;;
76 float)
77 value1=1.0f
78 value2=2.0f
79 value3=3.0f
80 ;;
81 double)
82 value1=1.0d
83 value2=2.0d
84 value3=3.0d
85 ;;
86 String)
87 value1=\"foo\"
88 value2=\"bar\"
89 value3=\"baz\"
90 ;;
91 Value)
92 value1="Value.getInstance(10)"
93 value2="Value.getInstance(20)"
94 value3="Value.getInstance(30)"
95 ;;
96 esac
97
98 args="$args -Dvalue1=$value1 -Dvalue2=$value2 -Dvalue3=$value3 -Dwrong_primitive_type=$wrong_primitive_type"
99
100 echo $args
101 out=VarHandleTestAccess${Type}.java
102 rm -f $out
103 java $SPP -nel $args -iX-VarHandleTestAccess.java.template -o$out
104 out=VarHandleTestMethodHandleAccess${Type}.java
105 rm -f $out
106 java $SPP -nel $args -iX-VarHandleTestMethodHandleAccess.java.template -o$out
107 out=VarHandleTestMethodType${Type}.java
108 rm -f $out
109 java $SPP -nel $args -iX-VarHandleTestMethodType.java.template -o$out
110 done
111
112 for type in short char int long float double
113 do
114 Type="$(tr '[:lower:]' '[:upper:]' <<< ${type:0:1})${type:1}"
115 args="-K$type -Dtype=$type -DType=$Type"
116
117 BoxType=$Type
118 case $type in
119 char)
120 BoxType=Character
121 ;;
122 int)
123 BoxType=Integer
124 ;;
125 esac
126 args="$args -DBoxType=$BoxType"
127
128 case $type in
129 int|long|float|double)
130 args="$args -KCAS"
131 ;;
132 esac
133
134 case $type in
135 int|long)
136 args="$args -KAtomicAdd"
137 ;;
138 esac
139
140 case $type in
141 int|long)
142 args="$args -KBitwise"
143 ;;
144 esac
145
146 # The value of `value3` is chosen such that when added to `value1` or `value2`
147 # it will result in carrying of bits over to the next byte, thereby detecting
148 # possible errors in endianness conversion e.g. if say for atomic addition the
149 # augend is incorrectly processed
150 case $type in
151 short)
152 value1=(short)0x0102
153 value2=(short)0x1112
154 value3=(short)0xFFFE
155 ;;
156 char)
157 value1=(char)0x0102
158 value2=(char)0x1112
159 value3=(char)0xFFFE
160 ;;
161 int)
162 value1=0x01020304
163 value2=0x11121314
164 value3=0xFFFEFDFC
165 ;;
166 long)
167 value1=0x0102030405060708L
168 value2=0x1112131415161718L
169 value3=0xFFFEFDFCFBFAF9F8L
170 ;;
171 float)
172 value1=0x01020304
173 value2=0x11121314
174 value3=0xFFFEFDFC
175 ;;
176 double)
177 value1=0x0102030405060708L
178 value2=0x1112131415161718L
179 value3=0xFFFEFDFCFBFAF9F8L
180 ;;
181 esac
182
183 args="$args -Dvalue1=$value1 -Dvalue2=$value2 -Dvalue3=$value3"
184
185 echo $args
186 out=VarHandleTestByteArrayAs${Type}.java
187 rm -f $out
188 java $SPP -nel $args -iX-VarHandleTestByteArrayView.java.template -o$out
189 done
190
191 rm -fr build