golang-notes icon indicating copy to clipboard operation
golang-notes copied to clipboard

plan9汇编里面的Scale是什么

Open jingyugao opened this issue 6 years ago • 2 comments

https://github.com/cch123/golang-notes/blob/master/assembly.md#%E5%9C%B0%E5%9D%80%E8%BF%90%E7%AE%97 这个地方不是很明白。另外,movq也有Scale的概念吗,比如下面的代码。

#define	g(r)	0(r)(TLS*1)
get_tls(CX)
MOVQ	g(CX), AX

展开后是 movq 0(CX)(TLS*1),AX 这是什么鬼?

jingyugao avatar Nov 18 '19 02:11 jingyugao

sorry,之前没 watch 这个仓库,问题都没看到哈

scale 其实就是个乘数,go 的编译器在编译这段的时候有个判断:

// parseScale converts a decimal string into a valid scale factor.
func (p *Parser) parseScale(s string) int8 {
	switch s {
	case "1", "2", "4", "8":
		return int8(s[0] - '0')
	}
	p.errorf("bad scale: %s", s)
	return 0
}

这个 scale 是判断寄存器表达式里面有 * 号的时候,才会去看 scale 对不对

cch123 avatar Dec 31 '19 16:12 cch123

至于第二个问题,应该是和线程本地存储的 TLS 机制相关,这个我没细研究哈哈 这两行是参考 runtime 里的代码来的

cch123 avatar Dec 31 '19 17:12 cch123