From: Mikael Pettersson <mikpe@csd.uu.se>
To: bcrl@redhat.com, torvalds@transmeta.com
Cc: linux-kernel@vger.kernel.org
Subject: Re: Using %cr2 to reference "current"
Date: Tue, 6 Nov 2001 23:05:02 +0100 (MET) [thread overview]
Message-ID: <200111062205.XAA23660@harpo.it.uu.se> (raw)
On Tue, 6 Nov 2001 09:49:15 -0800 (PST), Linus Torvalds wrote:
> /* Return "current" in %eax, trash %edx */
> do_get_current:
> movl $0x0003c000,%eax // 4 bits at bit 14
> movl $-16384,%edx // remove low 14 bits
> andl $esp,%eax
> andl $esp,%edx
> shrl $7,%eax // color it by 128 bytes
> addl %edx,%eax
> ret
>...
>I would not be surprised if "mov %cr2,%reg" will break a netburst trace
>cache entity, or even cause microcode to be executed. While I _guarantee_
>that all future Intel CPU's will continue to be fast at mixtures of simple
>arithmetic operations like "add" and "and".
On my Pentium 4:
- 6.30 cycles to copy %cr2 to %eax
- 1.05 cycles to compute a non-coloured current by masking %esp
- 2.31 cycles to compute a coloured current by your code above
I did some tests on using %cr2 for get_processor_id() a while ago,
but it was clearly slower (58% on P6, 20% on K6-III, 3% on P5MMX)
than *((%esp & mask)+offset), even though the latter also does a load.
/Mikael
next reply other threads:[~2001-11-06 22:05 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-11-06 22:05 Mikael Pettersson [this message]
-- strict thread matches above, loose matches on Subject: below --
2002-11-10 21:23 Igor Levicki
2001-11-06 7:18 H. Peter Anvin
2001-11-06 8:01 ` Robert Love
2001-11-06 10:55 ` Alan Cox
2001-11-06 17:31 ` Michael Barabanov
2001-11-06 14:14 ` Manfred Spraul
2001-11-06 10:58 ` Alan Cox
2001-11-06 17:04 ` Linus Torvalds
2001-11-06 17:46 ` Alan Cox
2001-11-06 17:59 ` Linus Torvalds
2001-11-06 18:14 ` Alan Cox
2001-11-06 16:55 ` Marcelo Tosatti
2001-11-06 18:14 ` Linus Torvalds
2001-11-06 18:31 ` Alan Cox
2001-11-06 22:38 ` Linus Torvalds
2001-11-07 0:00 ` Martin Dalecki
2001-11-06 23:19 ` Alan Cox
2001-11-07 0:43 ` Martin Dalecki
2001-11-07 0:27 ` Alan Cox
2001-11-07 0:35 ` Jeff Garzik
2001-11-07 14:00 ` Martin Dalecki
2001-11-07 13:38 ` Alan Cox
2001-11-07 14:59 ` Martin Dalecki
2001-11-07 14:17 ` Alan Cox
2001-11-07 14:34 ` Dirk Moerenhout
2001-11-07 14:54 ` Alan Cox
2001-11-07 15:32 ` David Howells
2001-11-07 15:36 ` Martin Dalecki
2001-11-08 14:08 ` Martin Dalecki
2001-11-07 20:04 ` Andrew Morton
2001-11-11 13:16 ` Martin Dalecki
2001-11-11 13:06 ` Keith Owens
2001-11-06 17:02 ` Linus Torvalds
2001-11-06 17:13 ` Benjamin LaHaise
2001-11-06 17:49 ` Linus Torvalds
2001-11-06 18:19 ` Alan Cox
2001-11-09 21:52 ` Jamie Lokier
2001-11-06 18:42 ` Benjamin LaHaise
2001-11-06 19:09 ` H. Peter Anvin
2001-11-06 19:16 ` Dave Jones
2001-11-06 20:10 ` Ricky Beam
2001-11-06 23:09 ` Alan Cox
2001-11-06 23:15 ` Dave Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200111062205.XAA23660@harpo.it.uu.se \
--to=mikpe@csd.uu.se \
--cc=bcrl@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®