On Tuesday, 16 December 2014 at 06:18:10 UTC, Leandro T. C. Melo via Digitalmars-d wrote:

including special-purpose registers (4 of them), a bounds directory/tables for storing/loading linearized pointer addresses, specific instructions to independently make/check upper/lower bounds, and even modified versions of
call/ret/jump.

Yes, it is a very interesting move. It seems like Intel keeps focusing on adding features to cores rather than scaling up the number of cores. If this goes on, I think x86 will start to influence the design of languages and runtime capabilities.

Tying bounds to the address of the pointer seems to have implications for how one should structure programs too. I wonder how the avoid cache misses in the table lookup, though. I guess that is why they have modified instructions that modify the instruction pointer?

One of the interesting features of MPX is that you turn off MPX and then the CPU will treat MPX instructions as NOP instructions. So you can basically compile your server with MPX, and only turn it on when you run into trouble or when you have low load.

​They are working in the ABI level so calling conventions can benefit from it. Although MPX currently supports only statically allocated arrays, a
memory-protected version of glibc is on the way​:
https://software.intel.com/en-us/blogs/2013/07/22/intel-memory-protection-extensions-intel-mpx-support-in-the-gnu-toolchain

Yes, they are building MPX support into malloc, I believe. So anything malloc'ed will be bounds-checkable when you turn on full MPX instrumentation.

​I've tried out the MPX-enabled GCC version and it looks pretty cool.

Did you run the MPX-enabled executable on an emulator?

Reply via email to