forked from Shiloh/githaven
62e6c9bc6c
* Add a storage layer for attachments * Fix some bug * fix test * Fix copyright head and lint * Fix bug * Add setting for minio and flags for migrate-storage * Add documents * fix lint * Add test for minio store type on attachments * fix test * fix test * Apply suggestions from code review Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com> * Add warning when storage migrated successfully * Fix drone * fix test * rebase * Fix test * display the error on console * Move minio test to amd64 since minio docker don't support arm64 * refactor the codes * add trace * Fix test * remove log on xorm * Fi download bug * Add a storage layer for attachments * Add setting for minio and flags for migrate-storage * fix lint * Add test for minio store type on attachments * Apply suggestions from code review Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com> * Fix drone * fix test * Fix test * display the error on console * Move minio test to amd64 since minio docker don't support arm64 * refactor the codes * add trace * Fix test * Add URL function to serve attachments directly from S3/Minio * Add ability to enable/disable redirection in attachment configuration * Fix typo * Add a storage layer for attachments * Add setting for minio and flags for migrate-storage * fix lint * Add test for minio store type on attachments * Apply suggestions from code review Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com> * Fix drone * fix test * Fix test * display the error on console * Move minio test to amd64 since minio docker don't support arm64 * don't change unrelated files * Fix lint * Fix build * update go.mod and go.sum * Use github.com/minio/minio-go/v6 * Remove unused function * Upgrade minio to v7 and some other improvements * fix lint * Fix go mod Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com> Co-authored-by: Tyler <tystuyfzand@gmail.com>
220 lines
7.9 KiB
Go
Vendored
220 lines
7.9 KiB
Go
Vendored
// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file.
|
|
|
|
//+build arm64,!gccgo,!noasm,!appengine
|
|
|
|
package cpuid
|
|
|
|
func getMidr() (midr uint64)
|
|
func getProcFeatures() (procFeatures uint64)
|
|
func getInstAttributes() (instAttrReg0, instAttrReg1 uint64)
|
|
|
|
func initCPU() {
|
|
cpuid = func(uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 }
|
|
cpuidex = func(x, y uint32) (a, b, c, d uint32) { return 0, 0, 0, 0 }
|
|
xgetbv = func(uint32) (a, b uint32) { return 0, 0 }
|
|
rdtscpAsm = func() (a, b, c, d uint32) { return 0, 0, 0, 0 }
|
|
}
|
|
|
|
func addInfo(c *CPUInfo) {
|
|
// ARM64 disabled for now.
|
|
if true {
|
|
return
|
|
}
|
|
// midr := getMidr()
|
|
|
|
// MIDR_EL1 - Main ID Register
|
|
// x--------------------------------------------------x
|
|
// | Name | bits | visible |
|
|
// |--------------------------------------------------|
|
|
// | Implementer | [31-24] | y |
|
|
// |--------------------------------------------------|
|
|
// | Variant | [23-20] | y |
|
|
// |--------------------------------------------------|
|
|
// | Architecture | [19-16] | y |
|
|
// |--------------------------------------------------|
|
|
// | PartNum | [15-4] | y |
|
|
// |--------------------------------------------------|
|
|
// | Revision | [3-0] | y |
|
|
// x--------------------------------------------------x
|
|
|
|
// fmt.Printf(" implementer: 0x%02x\n", (midr>>24)&0xff)
|
|
// fmt.Printf(" variant: 0x%01x\n", (midr>>20)&0xf)
|
|
// fmt.Printf("architecture: 0x%01x\n", (midr>>16)&0xf)
|
|
// fmt.Printf(" part num: 0x%03x\n", (midr>>4)&0xfff)
|
|
// fmt.Printf(" revision: 0x%01x\n", (midr>>0)&0xf)
|
|
|
|
procFeatures := getProcFeatures()
|
|
|
|
// ID_AA64PFR0_EL1 - Processor Feature Register 0
|
|
// x--------------------------------------------------x
|
|
// | Name | bits | visible |
|
|
// |--------------------------------------------------|
|
|
// | DIT | [51-48] | y |
|
|
// |--------------------------------------------------|
|
|
// | SVE | [35-32] | y |
|
|
// |--------------------------------------------------|
|
|
// | GIC | [27-24] | n |
|
|
// |--------------------------------------------------|
|
|
// | AdvSIMD | [23-20] | y |
|
|
// |--------------------------------------------------|
|
|
// | FP | [19-16] | y |
|
|
// |--------------------------------------------------|
|
|
// | EL3 | [15-12] | n |
|
|
// |--------------------------------------------------|
|
|
// | EL2 | [11-8] | n |
|
|
// |--------------------------------------------------|
|
|
// | EL1 | [7-4] | n |
|
|
// |--------------------------------------------------|
|
|
// | EL0 | [3-0] | n |
|
|
// x--------------------------------------------------x
|
|
|
|
var f ArmFlags
|
|
// if procFeatures&(0xf<<48) != 0 {
|
|
// fmt.Println("DIT")
|
|
// }
|
|
if procFeatures&(0xf<<32) != 0 {
|
|
f |= SVE
|
|
}
|
|
if procFeatures&(0xf<<20) != 15<<20 {
|
|
f |= ASIMD
|
|
if procFeatures&(0xf<<20) == 1<<20 {
|
|
// https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64pfr0_el1
|
|
// 0b0001 --> As for 0b0000, and also includes support for half-precision floating-point arithmetic.
|
|
f |= FPHP
|
|
f |= ASIMDHP
|
|
}
|
|
}
|
|
if procFeatures&(0xf<<16) != 0 {
|
|
f |= FP
|
|
}
|
|
|
|
instAttrReg0, instAttrReg1 := getInstAttributes()
|
|
|
|
// https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1
|
|
//
|
|
// ID_AA64ISAR0_EL1 - Instruction Set Attribute Register 0
|
|
// x--------------------------------------------------x
|
|
// | Name | bits | visible |
|
|
// |--------------------------------------------------|
|
|
// | TS | [55-52] | y |
|
|
// |--------------------------------------------------|
|
|
// | FHM | [51-48] | y |
|
|
// |--------------------------------------------------|
|
|
// | DP | [47-44] | y |
|
|
// |--------------------------------------------------|
|
|
// | SM4 | [43-40] | y |
|
|
// |--------------------------------------------------|
|
|
// | SM3 | [39-36] | y |
|
|
// |--------------------------------------------------|
|
|
// | SHA3 | [35-32] | y |
|
|
// |--------------------------------------------------|
|
|
// | RDM | [31-28] | y |
|
|
// |--------------------------------------------------|
|
|
// | ATOMICS | [23-20] | y |
|
|
// |--------------------------------------------------|
|
|
// | CRC32 | [19-16] | y |
|
|
// |--------------------------------------------------|
|
|
// | SHA2 | [15-12] | y |
|
|
// |--------------------------------------------------|
|
|
// | SHA1 | [11-8] | y |
|
|
// |--------------------------------------------------|
|
|
// | AES | [7-4] | y |
|
|
// x--------------------------------------------------x
|
|
|
|
// if instAttrReg0&(0xf<<52) != 0 {
|
|
// fmt.Println("TS")
|
|
// }
|
|
// if instAttrReg0&(0xf<<48) != 0 {
|
|
// fmt.Println("FHM")
|
|
// }
|
|
if instAttrReg0&(0xf<<44) != 0 {
|
|
f |= ASIMDDP
|
|
}
|
|
if instAttrReg0&(0xf<<40) != 0 {
|
|
f |= SM4
|
|
}
|
|
if instAttrReg0&(0xf<<36) != 0 {
|
|
f |= SM3
|
|
}
|
|
if instAttrReg0&(0xf<<32) != 0 {
|
|
f |= SHA3
|
|
}
|
|
if instAttrReg0&(0xf<<28) != 0 {
|
|
f |= ASIMDRDM
|
|
}
|
|
if instAttrReg0&(0xf<<20) != 0 {
|
|
f |= ATOMICS
|
|
}
|
|
if instAttrReg0&(0xf<<16) != 0 {
|
|
f |= CRC32
|
|
}
|
|
if instAttrReg0&(0xf<<12) != 0 {
|
|
f |= SHA2
|
|
}
|
|
if instAttrReg0&(0xf<<12) == 2<<12 {
|
|
// https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1
|
|
// 0b0010 --> As 0b0001, plus SHA512H, SHA512H2, SHA512SU0, and SHA512SU1 instructions implemented.
|
|
f |= SHA512
|
|
}
|
|
if instAttrReg0&(0xf<<8) != 0 {
|
|
f |= SHA1
|
|
}
|
|
if instAttrReg0&(0xf<<4) != 0 {
|
|
f |= AES
|
|
}
|
|
if instAttrReg0&(0xf<<4) == 2<<4 {
|
|
// https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar0_el1
|
|
// 0b0010 --> As for 0b0001, plus PMULL/PMULL2 instructions operating on 64-bit data quantities.
|
|
f |= PMULL
|
|
}
|
|
|
|
// https://developer.arm.com/docs/ddi0595/b/aarch64-system-registers/id_aa64isar1_el1
|
|
//
|
|
// ID_AA64ISAR1_EL1 - Instruction set attribute register 1
|
|
// x--------------------------------------------------x
|
|
// | Name | bits | visible |
|
|
// |--------------------------------------------------|
|
|
// | GPI | [31-28] | y |
|
|
// |--------------------------------------------------|
|
|
// | GPA | [27-24] | y |
|
|
// |--------------------------------------------------|
|
|
// | LRCPC | [23-20] | y |
|
|
// |--------------------------------------------------|
|
|
// | FCMA | [19-16] | y |
|
|
// |--------------------------------------------------|
|
|
// | JSCVT | [15-12] | y |
|
|
// |--------------------------------------------------|
|
|
// | API | [11-8] | y |
|
|
// |--------------------------------------------------|
|
|
// | APA | [7-4] | y |
|
|
// |--------------------------------------------------|
|
|
// | DPB | [3-0] | y |
|
|
// x--------------------------------------------------x
|
|
|
|
// if instAttrReg1&(0xf<<28) != 0 {
|
|
// fmt.Println("GPI")
|
|
// }
|
|
if instAttrReg1&(0xf<<28) != 24 {
|
|
f |= GPA
|
|
}
|
|
if instAttrReg1&(0xf<<20) != 0 {
|
|
f |= LRCPC
|
|
}
|
|
if instAttrReg1&(0xf<<16) != 0 {
|
|
f |= FCMA
|
|
}
|
|
if instAttrReg1&(0xf<<12) != 0 {
|
|
f |= JSCVT
|
|
}
|
|
// if instAttrReg1&(0xf<<8) != 0 {
|
|
// fmt.Println("API")
|
|
// }
|
|
// if instAttrReg1&(0xf<<4) != 0 {
|
|
// fmt.Println("APA")
|
|
// }
|
|
if instAttrReg1&(0xf<<0) != 0 {
|
|
f |= DCPOP
|
|
}
|
|
c.Arm = f
|
|
}
|