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 
  26 GENSRC_BUFFER := 
  27 
  28 GENSRC_BUFFER_TMP := $(JDK_OUTPUTDIR)/gensrc
  29 GENSRC_BUFFER_DST := $(JDK_OUTPUTDIR)/gensrc/java.base/java/nio
  30 
  31 GENSRC_BUFFER_SRC := $(JDK_TOPDIR)/src/java.base/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 
  40 define fixRw
  41   $1_RW := $2
  42   $1_rwkey := rw
  43   ifeq (R, $2)
  44     $1_rwkey := ro
  45   endif
  46 endef
  47 
  48 define 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
 152 endef
 153 
 154 define 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
 181 endef
 182 
 183 define 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 
 276 endef
 277 
 278 ###
 279 
 280 X_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 #
 292 HEAP_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 #
 311 DIRECT_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 #
 348 BYTE_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_JDK)
 381 GENSRC_JAVA_BASE += $(GENSRC_BUFFER)