GensrcBuffer.gmk revision 9330:8b1f1c2a400f
1#
2# Copyright (c) 2011, 2013, 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
29GENSRC_BUFFER_DST := $(JDK_OUTPUTDIR)/gensrc/java/nio
30
31GENSRC_BUFFER_SRC := $(JDK_TOPDIR)/src/share/classes/java/nio
32
33###
34
35$(GENSRC_BUFFER_DST)/_the.buffer.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_streams  := streamableType
73    $1_streamtype := int
74    $1_Streamtype := Int
75    $1_LBPV     := 1
76  endif
77
78  ifeq ($2, short)
79    $1_x        := s
80    $1_Type     := Short
81    $1_fulltype := short
82    $1_Fulltype := Short
83    $1_category := integralType
84    $1_LBPV     := 1
85  endif
86
87  ifeq ($2, int)
88    $1_a        := an
89    $1_A        := An
90    $1_x        := i
91    $1_Type     := Int
92    $1_fulltype := integer
93    $1_Fulltype := Integer
94    $1_category := integralType
95    $1_LBPV     := 2
96  endif
97
98  ifeq ($2, long)
99    $1_x        := l
100    $1_Type     := Long
101    $1_fulltype := long
102    $1_Fulltype := Long
103    $1_category := integralType
104    $1_LBPV     := 3
105  endif
106
107  ifeq ($2, float)
108    $1_x        := f
109    $1_Type     := Float
110    $1_fulltype := float
111    $1_Fulltype := Float
112    $1_category := floatingPointType
113    $1_LBPV     := 2
114  endif
115
116  ifeq ($2, double)
117    $1_x        := d
118    $1_Type     := Double
119    $1_fulltype := double
120    $1_Fulltype := Double
121    $1_category := floatingPointType
122    $1_LBPV     := 3
123  endif
124
125  $1_Swaptype := $$($1_Type)
126  $1_memtype := $2
127  $1_Memtype := $$($1_Type)
128
129  ifeq ($2, float)
130    $1_memtype := int
131    $1_Memtype := Int
132    ifneq ($3, U)
133      $1_Swaptype := Int
134      $1_fromBits := Float.intBitsToFloat
135      $1_toBits   := Float.floatToRawIntBits
136    endif
137  endif
138
139  ifeq ($2, double)
140    $1_memtype := long
141    $1_Memtype := Long
142    ifneq ($3, U)
143      $1_Swaptype := Long
144      $1_fromBits := Double.longBitsToDouble
145      $1_toBits   := Double.doubleToRawLongBits
146    endif
147  endif
148
149  ifeq ($3, S)
150    $1_swap := Bits.swap
151  endif
152endef
153
154define genBinOps
155  # param 1 target
156  # param 2 type
157  # param 3 BO
158  # param 4 RW
159  # param 5 nbytes
160  # param 6 nbytesButOne
161  $(call typesAndBits,$1,$2,$3)
162  $(call fixRw,$1,$4)
163  $1_nbytes := $5
164  $1_nbytesButOne := $6
165  $1_CMD := $(TOOL_SPP) \
166    -Dtype=$$($1_type) \
167    -DType=$$($1_Type) \
168    -Dfulltype=$$($1_fulltype) \
169    -Dmemtype=$$($1_memtype) \
170    -DMemtype=$$($1_Memtype) \
171    -DfromBits=$$($1_fromBits) \
172    -DtoBits=$$($1_toBits) \
173    -DLG_BYTES_PER_VALUE=$$($1_LBPV) \
174    -DBYTES_PER_VALUE="(1 << $$($1_LBPV))" \
175    -Dnbytes=$$($1_nbytes) \
176    -DnbytesButOne=$$($1_nbytesButOne) \
177    -DRW=$$($1_RW) \
178    -K$$($1_rwkey) \
179    -Da=$$($1_a) \
180    -be
181endef
182
183define SetupGenBuffer
184  # param 1 is for output file
185  # param 2 is template dependency
186  # param 3-9 are named args.
187  #   type :=
188  #   BIN :=
189  #   RW := Mutability (R)ead-only (W)ritable
190  #   BO := (U)nswapped/(S)wapped/(L)ittle/(B)ig
191  #
192  $(if $3,$1_$(strip $3))
193  $(if $4,$1_$(strip $4))
194  $(if $5,$1_$(strip $5))
195  $(if $6,$1_$(strip $6))
196  $(if $7,$1_$(strip $7))
197  $(if $8,$1_$(strip $8))
198  $(if $9,$1_$(strip $9))
199  $(if $(10),$1_$(strip $(10)))
200  $(if $(11),$1_$(strip $(11)))
201  $(if $(12),$1_$(strip $(12)))
202  $(if $(13),$1_$(strip $(13)))
203  $(if $(14),$1_$(strip $(14)))
204  $(foreach i,3 4 5 6 7 8 9 10 11 12 13 14 15,$(if $($i),$1_$(strip $($i)))$(NEWLINE))
205  $(call LogSetupMacroEntry,SetupGenBuffer($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15))
206  $(if $(16),$(error Internal makefile error: Too many arguments to SetupGenBuffer, please update GensrcBuffer.gmk))
207
208  $(call fixRw,$1,$$($1_RW))
209  $(call typesAndBits,$1,$$($1_type),$$($1_BO))
210
211  $1_DST := $(GENSRC_BUFFER_DST)/$1.java
212  $1_SRC := $(GENSRC_BUFFER_SRC)/$(strip $2).java.template
213  $1_SRC_BIN := $(GENSRC_BUFFER_SRC)/$(strip $2)-bin.java.template
214
215  $1_DEP := $$($1_SRC)
216  ifneq ($$($1_BIN), 1)
217    $1_DEP := $$($1_SRC)
218    $1_OUT := $$($1_DST)
219  else
220    $1_DEP += $$($1_SRC) $$($1_SRC_BIN)
221    $1_OUT := $(GENSRC_BUFFER_DST)/$1.binop.0.java
222  endif
223
224  ifeq ($$($1_BIN), 1)
225    $(call genBinOps,$1_char,char,$$($1_BO),$$($1_RW),two,one)
226    $(call genBinOps,$1_short,short,$$($1_BO),$$($1_RW),two,one)
227    $(call genBinOps,$1_int,int,$$($1_BO),$$($1_RW),four,three)
228    $(call genBinOps,$1_long,long,$$($1_BO),$$($1_RW),eight,seven)
229    $(call genBinOps,$1_float,float,$$($1_BO),$$($1_RW),four,three)
230    $(call genBinOps,$1_double,double,$$($1_BO),$$($1_RW),eight,seven)
231  endif
232
233  $$($1_DST): $$($1_DEP) $(GENSRC_BUFFER_DST)/_the.buffer.dir
234	$(TOOL_SPP) < $$($1_SRC) > $$($1_OUT).tmp \
235	    -K$$($1_type) \
236	    -K$$($1_category) \
237	    -K$$($1_streams) \
238	    -Dtype=$$($1_type) \
239	    -DType=$$($1_Type) \
240	    -Dfulltype=$$($1_fulltype) \
241	    -DFulltype=$$($1_Fulltype) \
242	    -Dstreamtype=$$($1_streamtype) \
243	    -DStreamtype=$$($1_Streamtype) \
244	    -Dx=$$($1_x) \
245	    -Dmemtype=$$($1_memtype) \
246	    -DMemtype=$$($1_Memtype) \
247	    -DSwaptype=$$($1_Swaptype) \
248	    -DfromBits=$$($1_fromBits) \
249	    -DtoBits=$$($1_toBits) \
250	    -DLG_BYTES_PER_VALUE=$$($1_LBPV) \
251	    -DBYTES_PER_VALUE="(1 << $$($1_LBPV))" \
252	    -DBO=$$($1_BO) \
253	    -Dswap=$$($1_swap) \
254	    -DRW=$$($1_RW) \
255	    -K$$($1_rwkey) \
256	    -Da=$$($1_a) \
257	    -DA=$$($1_A) \
258	    -Kbo$$($1_BO)
259	$(MV) $$($1_OUT).tmp $$($1_OUT)
260        # Do the extra bin thing
261        ifeq ($$($1_BIN), 1)
262	  $(SED) -e '/#BIN/,$$$$d' < $$($1_OUT) > $$($1_DST).tmp
263	  $(RM) $$($1_OUT)
264	  $$($1_char_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
265	  $$($1_short_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
266	  $$($1_int_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
267	  $$($1_long_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
268	  $$($1_float_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
269	  $$($1_double_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
270	  $(PRINTF) "}\n" >> $$($1_DST).tmp
271	  mv $$($1_DST).tmp $$($1_DST)
272        endif
273
274  GENSRC_BUFFER += $$($1_DST)
275
276endef
277
278###
279
280X_BUF := X-Buffer
281
282$(eval $(call SetupGenBuffer,ByteBuffer,  $(X_BUF), type:=byte, BIN:=1))
283$(eval $(call SetupGenBuffer,CharBuffer,  $(X_BUF), type:=char))
284$(eval $(call SetupGenBuffer,ShortBuffer, $(X_BUF), type:=short))
285$(eval $(call SetupGenBuffer,IntBuffer,   $(X_BUF), type:=int))
286$(eval $(call SetupGenBuffer,LongBuffer,  $(X_BUF), type:=long))
287$(eval $(call SetupGenBuffer,FloatBuffer, $(X_BUF), type:=float))
288$(eval $(call SetupGenBuffer,DoubleBuffer,$(X_BUF), type:=double))
289
290# Buffers whose contents are heap-allocated
291#
292HEAP_X_BUF := Heap-X-Buffer
293
294$(eval $(call SetupGenBuffer,HeapByteBuffer,   $(HEAP_X_BUF), type:=byte))
295$(eval $(call SetupGenBuffer,HeapByteBufferR,  $(HEAP_X_BUF), type:=byte, RW:=R))
296$(eval $(call SetupGenBuffer,HeapCharBuffer,   $(HEAP_X_BUF), type:=char))
297$(eval $(call SetupGenBuffer,HeapCharBufferR,  $(HEAP_X_BUF), type:=char, RW:=R))
298$(eval $(call SetupGenBuffer,HeapShortBuffer,  $(HEAP_X_BUF), type:=short))
299$(eval $(call SetupGenBuffer,HeapShortBufferR, $(HEAP_X_BUF), type:=short, RW:=R))
300$(eval $(call SetupGenBuffer,HeapIntBuffer,    $(HEAP_X_BUF), type:=int))
301$(eval $(call SetupGenBuffer,HeapIntBufferR,   $(HEAP_X_BUF), type:=int, RW:=R))
302$(eval $(call SetupGenBuffer,HeapLongBuffer,   $(HEAP_X_BUF), type:=long))
303$(eval $(call SetupGenBuffer,HeapLongBufferR,  $(HEAP_X_BUF), type:=long, RW:=R))
304$(eval $(call SetupGenBuffer,HeapFloatBuffer,  $(HEAP_X_BUF), type:=float))
305$(eval $(call SetupGenBuffer,HeapFloatBufferR, $(HEAP_X_BUF), type:=float, RW:=R))
306$(eval $(call SetupGenBuffer,HeapDoubleBuffer, $(HEAP_X_BUF), type:=double))
307$(eval $(call SetupGenBuffer,HeapDoubleBufferR,$(HEAP_X_BUF), type:=double, RW:=R))
308
309# Direct byte buffer
310#
311DIRECT_X_BUF := Direct-X-Buffer
312
313$(eval $(call SetupGenBuffer,DirectByteBuffer, $(DIRECT_X_BUF), type:=byte, BIN:=1))
314$(eval $(call SetupGenBuffer,DirectByteBufferR,$(DIRECT_X_BUF), type:=byte, BIN:=1, RW:=R))
315
316# Unswapped views of direct byte buffers
317#
318$(eval $(call SetupGenBuffer,DirectCharBufferU,   $(DIRECT_X_BUF), type:=char, BO:=U))
319$(eval $(call SetupGenBuffer,DirectCharBufferRU,  $(DIRECT_X_BUF), type:=char, RW:=R, BO:=U))
320$(eval $(call SetupGenBuffer,DirectShortBufferU,  $(DIRECT_X_BUF), type:=short, BO:=U))
321$(eval $(call SetupGenBuffer,DirectShortBufferRU, $(DIRECT_X_BUF), type:=short, RW:=R, BO:=U))
322$(eval $(call SetupGenBuffer,DirectIntBufferU,    $(DIRECT_X_BUF), type:=int, BO:=U))
323$(eval $(call SetupGenBuffer,DirectIntBufferRU,   $(DIRECT_X_BUF), type:=int, RW:=R, BO:=U))
324$(eval $(call SetupGenBuffer,DirectLongBufferU,   $(DIRECT_X_BUF), type:=long, BO:=U))
325$(eval $(call SetupGenBuffer,DirectLongBufferRU,  $(DIRECT_X_BUF), type:=long, RW:=R, BO:=U))
326$(eval $(call SetupGenBuffer,DirectFloatBufferU,  $(DIRECT_X_BUF), type:=float, BO:=U))
327$(eval $(call SetupGenBuffer,DirectFloatBufferRU, $(DIRECT_X_BUF), type:=float, RW:=R, BO:=U))
328$(eval $(call SetupGenBuffer,DirectDoubleBufferU, $(DIRECT_X_BUF), type:=double, BO:=U))
329$(eval $(call SetupGenBuffer,DirectDoubleBufferRU,$(DIRECT_X_BUF), type:=double, RW:=R, BO:=U))
330
331# Swapped views of direct byte buffers
332#
333$(eval $(call SetupGenBuffer,DirectCharBufferS,   $(DIRECT_X_BUF), type:=char, BO:=S))
334$(eval $(call SetupGenBuffer,DirectCharBufferRS,  $(DIRECT_X_BUF), type:=char, RW:=R, BO:=S))
335$(eval $(call SetupGenBuffer,DirectShortBufferS,  $(DIRECT_X_BUF), type:=short, BO:=S))
336$(eval $(call SetupGenBuffer,DirectShortBufferRS, $(DIRECT_X_BUF), type:=short, RW:=R, BO:=S))
337$(eval $(call SetupGenBuffer,DirectIntBufferS,    $(DIRECT_X_BUF), type:=int, BO:=S))
338$(eval $(call SetupGenBuffer,DirectIntBufferRS,   $(DIRECT_X_BUF), type:=int, RW:=R, BO:=S))
339$(eval $(call SetupGenBuffer,DirectLongBufferS,   $(DIRECT_X_BUF), type:=long, BO:=S))
340$(eval $(call SetupGenBuffer,DirectLongBufferRS,  $(DIRECT_X_BUF), type:=long, RW:=R, BO:=S))
341$(eval $(call SetupGenBuffer,DirectFloatBufferS,  $(DIRECT_X_BUF), type:=float, BO:=S))
342$(eval $(call SetupGenBuffer,DirectFloatBufferRS, $(DIRECT_X_BUF), type:=float, RW:=R, BO:=S))
343$(eval $(call SetupGenBuffer,DirectDoubleBufferS, $(DIRECT_X_BUF), type:=double, BO:=S))
344$(eval $(call SetupGenBuffer,DirectDoubleBufferRS,$(DIRECT_X_BUF), type:=double, RW:=R, BO:=S))
345
346# Big-endian views of byte buffers
347#
348BYTE_X_BUF := ByteBufferAs-X-Buffer
349
350$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferB,   $(BYTE_X_BUF), type:=char, BO:=B))
351$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferRB,  $(BYTE_X_BUF), type:=char, RW:=R, BO:=B))
352$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferB,  $(BYTE_X_BUF), type:=short, BO:=B))
353$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferRB, $(BYTE_X_BUF), type:=short, RW:=R, BO:=B))
354$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferB,    $(BYTE_X_BUF), type:=int, BO:=B))
355$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferRB,   $(BYTE_X_BUF), type:=int, RW:=R, BO:=B))
356$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferB,   $(BYTE_X_BUF), type:=long, BO:=B))
357$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferRB,  $(BYTE_X_BUF), type:=long, RW:=R, BO:=B))
358$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferB,  $(BYTE_X_BUF), type:=float, BO:=B))
359$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferRB, $(BYTE_X_BUF), type:=float, RW:=R, BO:=B))
360$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferB, $(BYTE_X_BUF), type:=double, BO:=B))
361$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferRB,$(BYTE_X_BUF), type:=double, RW:=R, BO:=B))
362
363# Little-endian views of byte buffers
364#
365$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferL,   $(BYTE_X_BUF), type:=char, BO:=L))
366$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferRL,  $(BYTE_X_BUF), type:=char, RW:=R, BO:=L))
367$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferL,  $(BYTE_X_BUF), type:=short, BO:=L))
368$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferRL, $(BYTE_X_BUF), type:=short, RW:=R, BO:=L))
369$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferL,    $(BYTE_X_BUF), type:=int, BO:=L))
370$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferRL,   $(BYTE_X_BUF), type:=int, RW:=R, BO:=L))
371$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferL,   $(BYTE_X_BUF), type:=long, BO:=L))
372$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferRL,  $(BYTE_X_BUF), type:=long, RW:=R, BO:=L))
373$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferL,  $(BYTE_X_BUF), type:=float, BO:=L))
374$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferRL, $(BYTE_X_BUF), type:=float, RW:=R, BO:=L))
375$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferL, $(BYTE_X_BUF), type:=double, BO:=L))
376$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferRL,$(BYTE_X_BUF), type:=double, RW:=R, BO:=L))
377
378###
379
380$(GENSRC_BUFFER): $(BUILD_TOOLS)
381