1 #
   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 
  26 GENSRC_BUFFER :=
  27 
  28 GENSRC_BUFFER_TMP := $(JDK_OUTPUTDIR)/gensrc
  29 GENSRC_BUFFER_DST := $(JDK_OUTPUTDIR)/gensrc/java/nio
  30 
  31 GENSRC_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 
  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)