aboutsummaryrefslogtreecommitdiffstats
path: root/prog/size.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-11-29 09:47:55 +0100
committerDmitry Vyukov <dvyukov@google.com>2017-11-29 11:12:47 +0100
commit3a80fe350da4f5fc054c06fe279cc7ea734eb28b (patch)
tree4022743a66524b3534fc30eb7ef73e2af36761e5 /prog/size.go
parent1a6a7478c298a362d63a2f412155c70b7f97671d (diff)
prog: support bytesizeN for vma
I guess this is currently unused, but ignoring bytesizeN for vma looks wrong. If user asks for bytesizeN for vma, divide vma size by N.
Diffstat (limited to 'prog/size.go')
-rw-r--r--prog/size.go22
1 files changed, 11 insertions, 11 deletions
diff --git a/prog/size.go b/prog/size.go
index 538b60c5d..718e0c426 100644
--- a/prog/size.go
+++ b/prog/size.go
@@ -7,29 +7,29 @@ import (
"fmt"
)
-func (target *Target) generateSize(arg Arg, lenType *LenType) Arg {
+func (target *Target) generateSize(arg Arg, lenType *LenType) uint64 {
if arg == nil {
// Arg is an optional pointer, set size to 0.
- return MakeConstArg(lenType, 0)
+ return 0
}
+ byteSize := lenType.ByteSize
+ if byteSize == 0 {
+ byteSize = 1
+ }
switch arg.Type().(type) {
case *VmaType:
a := arg.(*PointerArg)
- return MakeConstArg(lenType, a.PagesNum*target.PageSize)
+ return a.PagesNum * target.PageSize / byteSize
case *ArrayType:
a := arg.(*GroupArg)
if lenType.ByteSize != 0 {
- return MakeConstArg(lenType, a.Size()/lenType.ByteSize)
+ return a.Size() / byteSize
} else {
- return MakeConstArg(lenType, uint64(len(a.Inner)))
+ return uint64(len(a.Inner))
}
default:
- if lenType.ByteSize != 0 {
- return MakeConstArg(lenType, arg.Size()/lenType.ByteSize)
- } else {
- return MakeConstArg(lenType, arg.Size())
- }
+ return arg.Size() / byteSize
}
}
@@ -53,7 +53,7 @@ func (target *Target) assignSizes(args []Arg, parentsMap map[Arg]Arg) {
buf, ok := argsMap[typ.Buf]
if ok {
- *a = *target.generateSize(InnerArg(buf), typ).(*ConstArg)
+ a.Val = target.generateSize(InnerArg(buf), typ)
continue
}