jdk/makefiles/gensrc/GensrcBuffer.gmk
changeset 20549 815df0732142
parent 20547 453837141fac
equal deleted inserted replaced
20548:3262e31fc6b7 20549:815df0732142
       
     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)