blob: bc9c150da6b732e039f15c0c9a67241ed1fd3aea [file] [log] [blame]
erikje78df742012-06-07 20:40:50 -07001#
2# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
3# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4#
5# This code is free software; you can redistribute it and/or modify it
6# under the terms of the GNU General Public License version 2 only, as
7# published by the Free Software Foundation. Oracle designates this
8# particular file as subject to the "Classpath" exception as provided
9# by Oracle in the LICENSE file that accompanied this code.
10#
11# This code is distributed in the hope that it will be useful, but WITHOUT
12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14# version 2 for more details (a copy is included in the LICENSE file that
15# accompanied this code).
16#
17# You should have received a copy of the GNU General Public License version
18# 2 along with this work; if not, write to the Free Software Foundation,
19# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20#
21# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22# or visit www.oracle.com if you need additional information or have any
23# questions.
24#
25
26GENSRC_BUFFER :=
27
28GENSRC_BUFFER_TMP := $(JDK_OUTPUTDIR)/gensrc_buffer
29GENSRC_BUFFER_DST := $(JDK_OUTPUTDIR)/gensrc_buffer/java/nio
30
31GENSRC_BUFFER_SRC := $(JDK_TOPDIR)/src/share/classes/java/nio
32
33###
34
35$(GENSRC_BUFFER_DST)/_the.dir :
36 $(ECHO) "Generating buffer classes"
37 $(MKDIR) -p $(@D)
38 $(TOUCH) $@
39
40define fixRw
41 $1_RW := $2
42 $1_rwkey := rw
43 ifeq (R,$2)
44 $1_rwkey := ro
45 endif
46endef
47
48define typesAndBits
49 # param 1 target
50 # param 2 type
51 # param 3 BO
52 $1_a := a
53 $1_A := A
54
55 $1_type := $2
56
57 ifeq ($2, byte)
58 $1_x := b
59 $1_Type := Byte
60 $1_fulltype := byte
61 $1_Fulltype := Byte
62 $1_category := integralType
63 $1_LBPV := 0
64 endif
65
66 ifeq ($2, char)
67 $1_x := c
68 $1_Type := Char
69 $1_fulltype := character
70 $1_Fulltype := Character
71 $1_category := integralType
72 $1_LBPV := 1
73 endif
74
75 ifeq ($2, short)
76 $1_x := s
77 $1_Type := Short
78 $1_fulltype := short
79 $1_Fulltype := Short
80 $1_category := integralType
81 $1_LBPV := 1
82 endif
83
84 ifeq ($2, int)
85 $1_a := an
86 $1_A := An
87 $1_x := i
88 $1_Type := Int
89 $1_fulltype := integer
90 $1_Fulltype := Integer
91 $1_category := integralType
92 $1_LBPV := 2
93 endif
94
95 ifeq ($2, long)
96 $1_x := l
97 $1_Type := Long
98 $1_fulltype := long
99 $1_Fulltype := Long
100 $1_category := integralType
101 $1_LBPV := 3
102 endif
103
104 ifeq ($2, float)
105 $1_x := f
106 $1_Type := Float
107 $1_fulltype := float
108 $1_Fulltype := Float
109 $1_category := floatingPointType
110 $1_LBPV := 2
111 endif
112
113 ifeq ($2, double)
114 $1_x := d
115 $1_Type := Double
116 $1_fulltype := double
117 $1_Fulltype := Double
118 $1_category := floatingPointType
119 $1_LBPV := 3
120 endif
121
122 $1_Swaptype := $$($1_Type)
123 $1_memtype := $2
124 $1_Memtype := $$($1_Type)
125
126 ifeq ($2, float)
127 $1_memtype := int
128 $1_Memtype := Int
129 ifneq ($3,U)
130 $1_Swaptype := Int
131 $1_fromBits := Float.intBitsToFloat
132 $1_toBits := Float.floatToRawIntBits
133 endif
134 endif
135
136 ifeq ($2, double)
137 $1_memtype := long
138 $1_Memtype := Long
139 ifneq ($3,U)
140 $1_Swaptype := Long
141 $1_fromBits := Double.longBitsToDouble
142 $1_toBits := Double.doubleToRawLongBits
143 endif
144 endif
145
146 ifeq ($3, S)
147 $1_swap := Bits.swap
148 endif
149endef
150
151define genBinOps
152 # param 1 target
153 # param 2 type
154 # param 3 BO
155 # param 4 RW
156 # param 5 nbytes
157 # param 6 nbytesButOne
158 $(call typesAndBits,$1,$2,$3)
159 $(call fixRw,$1,$4)
160 $1_nbytes := $5
161 $1_nbytesButOne := $6
162 $1_CMD := $(TOOL_SPP) \
163 -Dtype=$$($1_type) \
164 -DType=$$($1_Type) \
165 -Dfulltype=$$($1_fulltype) \
166 -Dmemtype=$$($1_memtype) \
167 -DMemtype=$$($1_Memtype) \
168 -DfromBits=$$($1_fromBits) \
169 -DtoBits=$$($1_toBits) \
170 -DLG_BYTES_PER_VALUE=$$($1_LBPV) \
171 -DBYTES_PER_VALUE="(1 << $$($1_LBPV))" \
172 -Dnbytes=$$($1_nbytes) \
173 -DnbytesButOne=$$($1_nbytesButOne) \
174 -DRW=$$($1_RW) \
175 -K$$($1_rwkey) \
176 -Da=$$($1_a) \
177 -be
178endef
179
180define SetupGenBuffer
181 # param 1 is for output file
182 # param 2 is template dependency
183 # param 3-9 are named args.
184 # type :=
185 # BIN :=
186 # RW := Mutability (R)ead-only (W)ritable
187 # BO := (U)nswapped/(S)wapped/(L)ittle/(B)ig
188 #
189 $(if $3,$1_$(strip $3))
190 $(if $4,$1_$(strip $4))
191 $(if $5,$1_$(strip $5))
192 $(if $6,$1_$(strip $6))
193 $(if $7,$1_$(strip $7))
194 $(if $8,$1_$(strip $8))
195 $(if $9,$1_$(strip $9))
196 $(if $(10),$1_$(strip $(10)))
197 $(if $(11),$1_$(strip $(11)))
198 $(if $(12),$1_$(strip $(12)))
199 $(if $(13),$1_$(strip $(13)))
200 $(if $(14),$1_$(strip $(14)))
201
202 $(call fixRw,$1,$$($1_RW))
203 $(call typesAndBits,$1,$$($1_type),$$($1_BO))
204
205 $1_DST := $(GENSRC_BUFFER_DST)/$1.java
206 $1_SRC := $(GENSRC_BUFFER_SRC)/$(strip $2).java.template
207 $1_SRC_BIN := $(GENSRC_BUFFER_SRC)/$(strip $2)-bin.java.template
208
209 $1_DEP := $$($1_SRC)
210 ifneq ($$($1_BIN),1)
211 $1_DEP := $$($1_SRC)
212 $1_OUT := $$($1_DST)
213 else
214 $1_DEP += $$($1_SRC) $$($1_SRC_BIN)
215 $1_OUT := $(GENSRC_BUFFER_DST)/$1.binop.0.java
216 endif
217
218 ifeq ($$($1_BIN),1)
219 $(call genBinOps,$1_char,char,$$($1_BO),$$($1_RW),two,one)
220 $(call genBinOps,$1_short,short,$$($1_BO),$$($1_RW),two,one)
221 $(call genBinOps,$1_int,int,$$($1_BO),$$($1_RW),four,three)
222 $(call genBinOps,$1_long,long,$$($1_BO),$$($1_RW),eight,seven)
223 $(call genBinOps,$1_float,float,$$($1_BO),$$($1_RW),four,three)
224 $(call genBinOps,$1_double,double,$$($1_BO),$$($1_RW),eight,seven)
225 endif
226
227$$($1_DST) : $$($1_DEP) $(GENSRC_BUFFER_DST)/_the.dir
228 $(TOOL_SPP) < $$($1_SRC) > $$($1_OUT).temp \
229 -K$$($1_type) \
230 -K$$($1_category) \
231 -Dtype=$$($1_type) \
232 -DType=$$($1_Type) \
233 -Dfulltype=$$($1_fulltype) \
234 -DFulltype=$$($1_Fulltype) \
235 -Dx=$$($1_x) \
236 -Dmemtype=$$($1_memtype) \
237 -DMemtype=$$($1_Memtype) \
238 -DSwaptype=$$($1_Swaptype) \
239 -DfromBits=$$($1_fromBits) \
240 -DtoBits=$$($1_toBits) \
241 -DLG_BYTES_PER_VALUE=$$($1_LBPV) \
242 -DBYTES_PER_VALUE="(1 << $$($1_LBPV))" \
243 -DBO=$$($1_BO) \
244 -Dswap=$$($1_swap) \
245 -DRW=$$($1_RW) \
246 -K$$($1_rwkey) \
247 -Da=$$($1_a) \
248 -DA=$$($1_A) \
249 -Kbo$$($1_BO)
250 $(MV) $$($1_OUT).temp $$($1_OUT)
251# Do the extra bin thing
252ifeq ($$($1_BIN),1)
253 $(SED) -e '/#BIN/,$$$$d' < $$($1_OUT) > $$($1_DST).temp
254 $(RM) $$($1_OUT)
255 $$($1_char_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp
256 $$($1_short_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp
257 $$($1_int_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp
258 $$($1_long_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp
259 $$($1_float_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp
260 $$($1_double_CMD) < $$($1_SRC_BIN) >> $$($1_DST).temp
261 $(PRINTF) "}\n" >> $$($1_DST).temp
262 mv $$($1_DST).temp $$($1_DST)
263endif
264
265GENSRC_BUFFER += $$($1_DST)
266
267endef
268
269###
270
271X_BUF :=X-Buffer
272
273$(eval $(call SetupGenBuffer,ByteBuffer, $(X_BUF),type:=byte,BIN:=1))
274$(eval $(call SetupGenBuffer,CharBuffer, $(X_BUF),type:=char))
275$(eval $(call SetupGenBuffer,ShortBuffer, $(X_BUF),type:=short))
276$(eval $(call SetupGenBuffer,IntBuffer, $(X_BUF),type:=int))
277$(eval $(call SetupGenBuffer,LongBuffer, $(X_BUF),type:=long))
278$(eval $(call SetupGenBuffer,FloatBuffer, $(X_BUF),type:=float))
279$(eval $(call SetupGenBuffer,DoubleBuffer,$(X_BUF),type:=double))
280
281# Buffers whose contents are heap-allocated
282#
283HEAP_X_BUF := Heap-X-Buffer
284
285$(eval $(call SetupGenBuffer,HeapByteBuffer, $(HEAP_X_BUF),type:=byte))
286$(eval $(call SetupGenBuffer,HeapByteBufferR, $(HEAP_X_BUF),type:=byte,RW:=R))
287$(eval $(call SetupGenBuffer,HeapCharBuffer, $(HEAP_X_BUF),type:=char))
288$(eval $(call SetupGenBuffer,HeapCharBufferR, $(HEAP_X_BUF),type:=char,RW:=R))
289$(eval $(call SetupGenBuffer,HeapShortBuffer, $(HEAP_X_BUF),type:=short))
290$(eval $(call SetupGenBuffer,HeapShortBufferR, $(HEAP_X_BUF),type:=short,RW:=R))
291$(eval $(call SetupGenBuffer,HeapIntBuffer, $(HEAP_X_BUF),type:=int))
292$(eval $(call SetupGenBuffer,HeapIntBufferR, $(HEAP_X_BUF),type:=int,RW:=R))
293$(eval $(call SetupGenBuffer,HeapLongBuffer, $(HEAP_X_BUF),type:=long))
294$(eval $(call SetupGenBuffer,HeapLongBufferR, $(HEAP_X_BUF),type:=long,RW:=R))
295$(eval $(call SetupGenBuffer,HeapFloatBuffer, $(HEAP_X_BUF),type:=float))
296$(eval $(call SetupGenBuffer,HeapFloatBufferR, $(HEAP_X_BUF),type:=float,RW:=R))
297$(eval $(call SetupGenBuffer,HeapDoubleBuffer, $(HEAP_X_BUF),type:=double))
298$(eval $(call SetupGenBuffer,HeapDoubleBufferR,$(HEAP_X_BUF),type:=double,RW:=R))
299
300# Direct byte buffer
301#
302DIRECT_X_BUF := Direct-X-Buffer
303
304$(eval $(call SetupGenBuffer,DirectByteBuffer, $(DIRECT_X_BUF),type:=byte,BIN:=1))
305$(eval $(call SetupGenBuffer,DirectByteBufferR,$(DIRECT_X_BUF),type:=byte,BIN:=1,RW:=R))
306
307# Unswapped views of direct byte buffers
308#
309$(eval $(call SetupGenBuffer,DirectCharBufferU, $(DIRECT_X_BUF),type:=char,BO:=U))
310$(eval $(call SetupGenBuffer,DirectCharBufferRU, $(DIRECT_X_BUF),type:=char,RW:=R,BO:=U))
311$(eval $(call SetupGenBuffer,DirectShortBufferU, $(DIRECT_X_BUF),type:=short,BO:=U))
312$(eval $(call SetupGenBuffer,DirectShortBufferRU, $(DIRECT_X_BUF),type:=short,RW:=R,BO:=U))
313$(eval $(call SetupGenBuffer,DirectIntBufferU, $(DIRECT_X_BUF),type:=int,BO:=U))
314$(eval $(call SetupGenBuffer,DirectIntBufferRU, $(DIRECT_X_BUF),type:=int,RW:=R,BO:=U))
315$(eval $(call SetupGenBuffer,DirectLongBufferU, $(DIRECT_X_BUF),type:=long,BO:=U))
316$(eval $(call SetupGenBuffer,DirectLongBufferRU, $(DIRECT_X_BUF),type:=long,RW:=R,BO:=U))
317$(eval $(call SetupGenBuffer,DirectFloatBufferU, $(DIRECT_X_BUF),type:=float,BO:=U))
318$(eval $(call SetupGenBuffer,DirectFloatBufferRU, $(DIRECT_X_BUF),type:=float,RW:=R,BO:=U))
319$(eval $(call SetupGenBuffer,DirectDoubleBufferU, $(DIRECT_X_BUF),type:=double,BO:=U))
320$(eval $(call SetupGenBuffer,DirectDoubleBufferRU,$(DIRECT_X_BUF),type:=double,RW:=R,BO:=U))
321
322# Swapped views of direct byte buffers
323#
324$(eval $(call SetupGenBuffer,DirectCharBufferS, $(DIRECT_X_BUF),type:=char,BO:=S))
325$(eval $(call SetupGenBuffer,DirectCharBufferRS, $(DIRECT_X_BUF),type:=char,RW:=R,BO:=S))
326$(eval $(call SetupGenBuffer,DirectShortBufferS, $(DIRECT_X_BUF),type:=short,BO:=S))
327$(eval $(call SetupGenBuffer,DirectShortBufferRS, $(DIRECT_X_BUF),type:=short,RW:=R,BO:=S))
328$(eval $(call SetupGenBuffer,DirectIntBufferS, $(DIRECT_X_BUF),type:=int,BO:=S))
329$(eval $(call SetupGenBuffer,DirectIntBufferRS, $(DIRECT_X_BUF),type:=int,RW:=R,BO:=S))
330$(eval $(call SetupGenBuffer,DirectLongBufferS, $(DIRECT_X_BUF),type:=long,BO:=S))
331$(eval $(call SetupGenBuffer,DirectLongBufferRS, $(DIRECT_X_BUF),type:=long,RW:=R,BO:=S))
332$(eval $(call SetupGenBuffer,DirectFloatBufferS, $(DIRECT_X_BUF),type:=float,BO:=S))
333$(eval $(call SetupGenBuffer,DirectFloatBufferRS, $(DIRECT_X_BUF),type:=float,RW:=R,BO:=S))
334$(eval $(call SetupGenBuffer,DirectDoubleBufferS, $(DIRECT_X_BUF),type:=double,BO:=S))
335$(eval $(call SetupGenBuffer,DirectDoubleBufferRS,$(DIRECT_X_BUF),type:=double,RW:=R,BO:=S))
336
337# Big-endian views of byte buffers
338#
339BYTE_X_BUF := ByteBufferAs-X-Buffer
340
341$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferB, $(BYTE_X_BUF),type:=char,BO:=B))
342$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferRB, $(BYTE_X_BUF),type:=char,RW:=R,BO:=B))
343$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferB, $(BYTE_X_BUF),type:=short,BO:=B))
344$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferRB, $(BYTE_X_BUF),type:=short,RW:=R,BO:=B))
345$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferB, $(BYTE_X_BUF),type:=int,BO:=B))
346$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferRB, $(BYTE_X_BUF),type:=int,RW:=R,BO:=B))
347$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferB, $(BYTE_X_BUF),type:=long,BO:=B))
348$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferRB, $(BYTE_X_BUF),type:=long,RW:=R,BO:=B))
349$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferB, $(BYTE_X_BUF),type:=float,BO:=B))
350$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferRB, $(BYTE_X_BUF),type:=float,RW:=R,BO:=B))
351$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferB, $(BYTE_X_BUF),type:=double,BO:=B))
352$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferRB,$(BYTE_X_BUF),type:=double,RW:=R,BO:=B))
353
354# Little-endian views of byte buffers
355#
356$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferL, $(BYTE_X_BUF),type:=char,BO:=L))
357$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferRL, $(BYTE_X_BUF),type:=char,RW:=R,BO:=L))
358$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferL, $(BYTE_X_BUF),type:=short,BO:=L))
359$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferRL, $(BYTE_X_BUF),type:=short,RW:=R,BO:=L))
360$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferL, $(BYTE_X_BUF),type:=int,BO:=L))
361$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferRL, $(BYTE_X_BUF),type:=int,RW:=R,BO:=L))
362$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferL, $(BYTE_X_BUF),type:=long,BO:=L))
363$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferRL, $(BYTE_X_BUF),type:=long,RW:=R,BO:=L))
364$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferL, $(BYTE_X_BUF),type:=float,BO:=L))
365$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferRL, $(BYTE_X_BUF),type:=float,RW:=R,BO:=L))
366$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferL, $(BYTE_X_BUF),type:=double,BO:=L))
367$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferRL,$(BYTE_X_BUF),type:=double,RW:=R,BO:=L))
368
369###
370
371$(GENSRC_BUFFER) : $(BUILD_TOOLS)