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_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
 149 endef
 150 
 151 define 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
 178 endef
 179 
 180 define 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         $(foreach i,3 4 5 6 7 8 9 10 11 12 13 14 15,$(if $($i),$1_$(strip $($i)))$(NEWLINE))
 202         $(call LogSetupMacroEntry,SetupGenBuffer($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15))
 203         $(if $(16),$(error Internal makefile error: Too many arguments to SetupGenBuffer, please update GensrcBuffer.gmk))
 204 
 205         $(call fixRw,$1,$$($1_RW))
 206         $(call typesAndBits,$1,$$($1_type),$$($1_BO))
 207 
 208         $1_DST     := $(GENSRC_BUFFER_DST)/$1.java
 209         $1_SRC     := $(GENSRC_BUFFER_SRC)/$(strip $2).java.template
 210         $1_SRC_BIN := $(GENSRC_BUFFER_SRC)/$(strip $2)-bin.java.template
 211 
 212         $1_DEP := $$($1_SRC)
 213         ifneq ($$($1_BIN),1)
 214                 $1_DEP := $$($1_SRC)
 215                 $1_OUT := $$($1_DST)
 216         else
 217                 $1_DEP += $$($1_SRC) $$($1_SRC_BIN)
 218                 $1_OUT := $(GENSRC_BUFFER_DST)/$1.binop.0.java
 219         endif
 220 
 221         ifeq ($$($1_BIN),1)
 222                 $(call genBinOps,$1_char,char,$$($1_BO),$$($1_RW),two,one)
 223                 $(call genBinOps,$1_short,short,$$($1_BO),$$($1_RW),two,one)
 224                 $(call genBinOps,$1_int,int,$$($1_BO),$$($1_RW),four,three)
 225                 $(call genBinOps,$1_long,long,$$($1_BO),$$($1_RW),eight,seven)
 226                 $(call genBinOps,$1_float,float,$$($1_BO),$$($1_RW),four,three)
 227                 $(call genBinOps,$1_double,double,$$($1_BO),$$($1_RW),eight,seven)
 228         endif
 229 
 230 $$($1_DST) : $$($1_DEP) $(GENSRC_BUFFER_DST)/_the.buffer.dir
 231         $(TOOL_SPP) < $$($1_SRC) > $$($1_OUT).tmp \
 232                 -K$$($1_type) \
 233                 -K$$($1_category) \
 234                 -Dtype=$$($1_type) \
 235                 -DType=$$($1_Type) \
 236                 -Dfulltype=$$($1_fulltype) \
 237                 -DFulltype=$$($1_Fulltype) \
 238                 -Dx=$$($1_x) \
 239                 -Dmemtype=$$($1_memtype) \
 240                 -DMemtype=$$($1_Memtype) \
 241                 -DSwaptype=$$($1_Swaptype) \
 242                 -DfromBits=$$($1_fromBits) \
 243                 -DtoBits=$$($1_toBits) \
 244                 -DLG_BYTES_PER_VALUE=$$($1_LBPV) \
 245                 -DBYTES_PER_VALUE="(1 << $$($1_LBPV))" \
 246                 -DBO=$$($1_BO) \
 247                 -Dswap=$$($1_swap) \
 248                 -DRW=$$($1_RW) \
 249                 -K$$($1_rwkey) \
 250                 -Da=$$($1_a) \
 251                 -DA=$$($1_A) \
 252                 -Kbo$$($1_BO)
 253                 $(MV) $$($1_OUT).tmp $$($1_OUT)
 254 # Do the extra bin thing
 255 ifeq ($$($1_BIN),1)
 256         $(SED) -e '/#BIN/,$$$$d' < $$($1_OUT) > $$($1_DST).tmp
 257         $(RM) $$($1_OUT)
 258         $$($1_char_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
 259         $$($1_short_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
 260         $$($1_int_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
 261         $$($1_long_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
 262         $$($1_float_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
 263         $$($1_double_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
 264         $(PRINTF) "}\n" >> $$($1_DST).tmp
 265         mv $$($1_DST).tmp $$($1_DST)
 266 endif
 267 
 268 GENSRC_BUFFER += $$($1_DST)
 269 
 270 endef
 271 
 272 ###
 273 
 274 X_BUF :=X-Buffer
 275 
 276 $(eval $(call SetupGenBuffer,ByteBuffer,  $(X_BUF),type:=byte,BIN:=1))
 277 $(eval $(call SetupGenBuffer,CharBuffer,  $(X_BUF),type:=char))
 278 $(eval $(call SetupGenBuffer,ShortBuffer, $(X_BUF),type:=short))
 279 $(eval $(call SetupGenBuffer,IntBuffer,   $(X_BUF),type:=int))
 280 $(eval $(call SetupGenBuffer,LongBuffer,  $(X_BUF),type:=long))
 281 $(eval $(call SetupGenBuffer,FloatBuffer, $(X_BUF),type:=float))
 282 $(eval $(call SetupGenBuffer,DoubleBuffer,$(X_BUF),type:=double))
 283 
 284 # Buffers whose contents are heap-allocated
 285 # 
 286 HEAP_X_BUF := Heap-X-Buffer
 287 
 288 $(eval $(call SetupGenBuffer,HeapByteBuffer,   $(HEAP_X_BUF),type:=byte))
 289 $(eval $(call SetupGenBuffer,HeapByteBufferR,  $(HEAP_X_BUF),type:=byte,RW:=R))
 290 $(eval $(call SetupGenBuffer,HeapCharBuffer,   $(HEAP_X_BUF),type:=char))
 291 $(eval $(call SetupGenBuffer,HeapCharBufferR,  $(HEAP_X_BUF),type:=char,RW:=R))
 292 $(eval $(call SetupGenBuffer,HeapShortBuffer,  $(HEAP_X_BUF),type:=short))
 293 $(eval $(call SetupGenBuffer,HeapShortBufferR, $(HEAP_X_BUF),type:=short,RW:=R))
 294 $(eval $(call SetupGenBuffer,HeapIntBuffer,    $(HEAP_X_BUF),type:=int))
 295 $(eval $(call SetupGenBuffer,HeapIntBufferR,   $(HEAP_X_BUF),type:=int,RW:=R))
 296 $(eval $(call SetupGenBuffer,HeapLongBuffer,   $(HEAP_X_BUF),type:=long))
 297 $(eval $(call SetupGenBuffer,HeapLongBufferR,  $(HEAP_X_BUF),type:=long,RW:=R))
 298 $(eval $(call SetupGenBuffer,HeapFloatBuffer,  $(HEAP_X_BUF),type:=float))
 299 $(eval $(call SetupGenBuffer,HeapFloatBufferR, $(HEAP_X_BUF),type:=float,RW:=R))
 300 $(eval $(call SetupGenBuffer,HeapDoubleBuffer, $(HEAP_X_BUF),type:=double))
 301 $(eval $(call SetupGenBuffer,HeapDoubleBufferR,$(HEAP_X_BUF),type:=double,RW:=R))
 302 
 303 # Direct byte buffer
 304 # 
 305 DIRECT_X_BUF := Direct-X-Buffer
 306 
 307 $(eval $(call SetupGenBuffer,DirectByteBuffer, $(DIRECT_X_BUF),type:=byte,BIN:=1))
 308 $(eval $(call SetupGenBuffer,DirectByteBufferR,$(DIRECT_X_BUF),type:=byte,BIN:=1,RW:=R))
 309 
 310 # Unswapped views of direct byte buffers
 311 #
 312 $(eval $(call SetupGenBuffer,DirectCharBufferU,   $(DIRECT_X_BUF),type:=char,BO:=U))
 313 $(eval $(call SetupGenBuffer,DirectCharBufferRU,  $(DIRECT_X_BUF),type:=char,RW:=R,BO:=U))
 314 $(eval $(call SetupGenBuffer,DirectShortBufferU,  $(DIRECT_X_BUF),type:=short,BO:=U))
 315 $(eval $(call SetupGenBuffer,DirectShortBufferRU, $(DIRECT_X_BUF),type:=short,RW:=R,BO:=U))
 316 $(eval $(call SetupGenBuffer,DirectIntBufferU,    $(DIRECT_X_BUF),type:=int,BO:=U))
 317 $(eval $(call SetupGenBuffer,DirectIntBufferRU,   $(DIRECT_X_BUF),type:=int,RW:=R,BO:=U))
 318 $(eval $(call SetupGenBuffer,DirectLongBufferU,   $(DIRECT_X_BUF),type:=long,BO:=U))
 319 $(eval $(call SetupGenBuffer,DirectLongBufferRU,  $(DIRECT_X_BUF),type:=long,RW:=R,BO:=U))
 320 $(eval $(call SetupGenBuffer,DirectFloatBufferU,  $(DIRECT_X_BUF),type:=float,BO:=U))
 321 $(eval $(call SetupGenBuffer,DirectFloatBufferRU, $(DIRECT_X_BUF),type:=float,RW:=R,BO:=U))
 322 $(eval $(call SetupGenBuffer,DirectDoubleBufferU, $(DIRECT_X_BUF),type:=double,BO:=U))
 323 $(eval $(call SetupGenBuffer,DirectDoubleBufferRU,$(DIRECT_X_BUF),type:=double,RW:=R,BO:=U))
 324 
 325 # Swapped views of direct byte buffers
 326 #
 327 $(eval $(call SetupGenBuffer,DirectCharBufferS,   $(DIRECT_X_BUF),type:=char,BO:=S))
 328 $(eval $(call SetupGenBuffer,DirectCharBufferRS,  $(DIRECT_X_BUF),type:=char,RW:=R,BO:=S))
 329 $(eval $(call SetupGenBuffer,DirectShortBufferS,  $(DIRECT_X_BUF),type:=short,BO:=S))
 330 $(eval $(call SetupGenBuffer,DirectShortBufferRS, $(DIRECT_X_BUF),type:=short,RW:=R,BO:=S))
 331 $(eval $(call SetupGenBuffer,DirectIntBufferS,    $(DIRECT_X_BUF),type:=int,BO:=S))
 332 $(eval $(call SetupGenBuffer,DirectIntBufferRS,   $(DIRECT_X_BUF),type:=int,RW:=R,BO:=S))
 333 $(eval $(call SetupGenBuffer,DirectLongBufferS,   $(DIRECT_X_BUF),type:=long,BO:=S))
 334 $(eval $(call SetupGenBuffer,DirectLongBufferRS,  $(DIRECT_X_BUF),type:=long,RW:=R,BO:=S))
 335 $(eval $(call SetupGenBuffer,DirectFloatBufferS,  $(DIRECT_X_BUF),type:=float,BO:=S))
 336 $(eval $(call SetupGenBuffer,DirectFloatBufferRS, $(DIRECT_X_BUF),type:=float,RW:=R,BO:=S))
 337 $(eval $(call SetupGenBuffer,DirectDoubleBufferS, $(DIRECT_X_BUF),type:=double,BO:=S))
 338 $(eval $(call SetupGenBuffer,DirectDoubleBufferRS,$(DIRECT_X_BUF),type:=double,RW:=R,BO:=S))
 339 
 340 # Big-endian views of byte buffers
 341 #
 342 BYTE_X_BUF := ByteBufferAs-X-Buffer
 343 
 344 $(eval $(call SetupGenBuffer,ByteBufferAsCharBufferB,   $(BYTE_X_BUF),type:=char,BO:=B))
 345 $(eval $(call SetupGenBuffer,ByteBufferAsCharBufferRB,  $(BYTE_X_BUF),type:=char,RW:=R,BO:=B))
 346 $(eval $(call SetupGenBuffer,ByteBufferAsShortBufferB,  $(BYTE_X_BUF),type:=short,BO:=B))
 347 $(eval $(call SetupGenBuffer,ByteBufferAsShortBufferRB, $(BYTE_X_BUF),type:=short,RW:=R,BO:=B))
 348 $(eval $(call SetupGenBuffer,ByteBufferAsIntBufferB,    $(BYTE_X_BUF),type:=int,BO:=B))
 349 $(eval $(call SetupGenBuffer,ByteBufferAsIntBufferRB,   $(BYTE_X_BUF),type:=int,RW:=R,BO:=B))
 350 $(eval $(call SetupGenBuffer,ByteBufferAsLongBufferB,   $(BYTE_X_BUF),type:=long,BO:=B))
 351 $(eval $(call SetupGenBuffer,ByteBufferAsLongBufferRB,  $(BYTE_X_BUF),type:=long,RW:=R,BO:=B))
 352 $(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferB,  $(BYTE_X_BUF),type:=float,BO:=B))
 353 $(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferRB, $(BYTE_X_BUF),type:=float,RW:=R,BO:=B))
 354 $(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferB, $(BYTE_X_BUF),type:=double,BO:=B))
 355 $(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferRB,$(BYTE_X_BUF),type:=double,RW:=R,BO:=B))
 356 
 357 # Little-endian views of byte buffers
 358 #
 359 $(eval $(call SetupGenBuffer,ByteBufferAsCharBufferL,   $(BYTE_X_BUF),type:=char,BO:=L))
 360 $(eval $(call SetupGenBuffer,ByteBufferAsCharBufferRL,  $(BYTE_X_BUF),type:=char,RW:=R,BO:=L))
 361 $(eval $(call SetupGenBuffer,ByteBufferAsShortBufferL,  $(BYTE_X_BUF),type:=short,BO:=L))
 362 $(eval $(call SetupGenBuffer,ByteBufferAsShortBufferRL, $(BYTE_X_BUF),type:=short,RW:=R,BO:=L))
 363 $(eval $(call SetupGenBuffer,ByteBufferAsIntBufferL,    $(BYTE_X_BUF),type:=int,BO:=L))
 364 $(eval $(call SetupGenBuffer,ByteBufferAsIntBufferRL,   $(BYTE_X_BUF),type:=int,RW:=R,BO:=L))
 365 $(eval $(call SetupGenBuffer,ByteBufferAsLongBufferL,   $(BYTE_X_BUF),type:=long,BO:=L))
 366 $(eval $(call SetupGenBuffer,ByteBufferAsLongBufferRL,  $(BYTE_X_BUF),type:=long,RW:=R,BO:=L))
 367 $(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferL,  $(BYTE_X_BUF),type:=float,BO:=L))
 368 $(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferRL, $(BYTE_X_BUF),type:=float,RW:=R,BO:=L))
 369 $(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferL, $(BYTE_X_BUF),type:=double,BO:=L))
 370 $(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferRL,$(BYTE_X_BUF),type:=double,RW:=R,BO:=L))
 371 
 372 ###
 373 
 374 $(GENSRC_BUFFER) : $(BUILD_TOOLS)