►
From YouTube: ARM API Review: Part 1 of N
Description
Multistreaming with https://restream.io/
A
A
A
Well,
but
you're,
adding
the
is
like
the
proposed
API
says
to
add
the
is
supported.
I
guess
the
problem
is,
if
we
extend
it,
it'll
still
inherit
the
thing.
So
we
need
all
right.
So
we
need
to
do
it
because
we
need
them.
We
need
to
mask
out
the
inherited
member
even
on
the
right
type,
specific
subclass,
sad.
A
A
B
It's
kind
of
good
and
bad,
because
that's
also
the
thing
that
enables
us
to
say
that
sha-3,
it
says
all
the
static
members,
some
shot
one
shot,
some
shot
three
and
shot
two
and
so
on.
Alright,
so
that's
the
a
shot.
One
is
a
bad
example,
but
SSE
we
have
done
that
right
so
that
you
can
have
the
don't
have
to
reason
about,
or
was
this
a
method
introduced
in
sse2
sse3
right?
If
you
requires
a
three
year
on
you,
don't
have
to
worry
about
that.
B
B
C
B
D
D
C
D
A
A
Question
is,
should
we
add
the
the
second
half
of
the
check
or
not
so
if
you
said
child
Shaul,
one-armed
64,
that
is
supported
but
you're
on
arm
32.
Should
that
return
false?
Because
why
are
you
asking
an
arm,
64
question
and
well,
given
that
no
one
should
really
be
hitting
these
sub
ones,
because
we
haven't
defined
any
instructions
uniquely
under
them.
I
would
be
fine
with
saying,
let's
just
add
the
redundant
check
for
the
pointer
size.
Well,.
C
The
way
it
probably
be
implemented
is
the
same
way
it
is
supported
are
today,
which
is
we
actually
have
two
copies
of
of
the
class.
One
is
used
for
the
arm
compilation
and
it
always
returns
false
for
the
x86
and
then
onyx,
and
then
there's
a
separate
implementation
for
x86,
which
is
recursive
and
the
JIT
handles,
and
there's
already
all
the
hookups
for
the
JIT
to
handle
that
today.
C
B
C
B
Basically,
what
that
means
is,
if
I'm
doing
sha-1
blah
blah
blah
in
order
to
know
whether
blah
blah
blah
is
but
I
still
have
to
only
ask
sha-1
dot
is
supported,
but
if
I
want
to
access
other
members
on
sha-1
or
arm
64
table
blah
blah,
then
today
the
problem
is
because
the
is
supported
is
defined
on
the
base
type.
It
would
lead
to
misleading
results.
A
E
F
B
C
B
C
You
did
the
chip,
if
you
did
the
check,
then
it
would.
It
would
tell
you
that
and-
and
it
was
supported,
then
you'd
be
able
to
call
any
of
the
ARM
based
arm
sixty-four
methods
and
they
just
work.
If
you,
if
you
call
the
check
and
it's
not
supported,
then
you
then
the
code
path
will
never
be
hit
and
you
don't
have
to
worry
about
it.
C
B
C
C
However,
if
you
move
to
avx2,
for
example,
which
doesn't
have
an
x64
class,
then
when
the
user
types
a
B,
x2
X
64,
the
compiler
allows
it
but
dot.
X
64
is
actually
SSE
for
1
X
64,
and
so
you
think,
you're
checking
against
avx2
x64
is
supported,
and
you
might
assume
that
you
can
then
call
avx2
methods.
A
So
tanner
is
there
a
there
right
now,
any
reason
that
we
would
want
someone
to
ever
say
sha-256
that
arm
64?
That
is
supported
not
today.
So
what?
If,
instead
of
doing
what
you
have
proposed
here,
we
do
editor
browsable,
never
public,
ABS
or
public,
sealed
class
arm,
64,
:
or
curly
curly.
So
we
define
it
and
you
will
now
fail
to
compile
if
you
said
sha-256
that
arm
64.
That
is
supported
because
now,
we've
masked
out
the
base
class,
where
we've
masked
out
the
nested
type
from
the
base
class.
B
A
And
that's
the
that's.
The
point
is
that
the
derived
type
floated
up
from
the
base
class
right
and
you're
you're,
not
actually
walking
through
a
thing
that
makes
sense
to
walk
through
so
yeah,
so
I
think
what
we
want
to
do
is
is
mask
out
the
class
so
give
it
know,
define
it
give
it
know.
Members
don't
inherit
the
base
arm,
64
and
then
just
put
editor
R
as
well.
Never
on
it.
A
B
B
B
C
B
B
B
B
B
B
C
C
So
we
we
exposed
vector,
64,
create
methods
we
didn't
expose,
vector,
64,
create
scaler
for
double
long
or
you
long.
They
currently
can
be
done
via
the
create
methods
it
because
they
just
take
one
argument,
but
it's
it
can
be
difficult
for
some
users
to
resolve
or
find
them.
So
their
proposal
is
just.
We
also
expose
create
scalar
methods
for
parity.
B
And
a
sensor,
so
basically
you
said:
that's
why
it's
hard
to
discover,
because
we
don't
have
overloads
that
basically
would
look
for
a
create
scaler,
but
it
couldn't
be
able
they
wouldn't
be
able
to
find
it
because
it
doesn't
exist
and
the
create
one
hasn't.
Overloaded
basically
does
the
same,
but
it
doesn't
follow
our
naming
conventions.
Is
that
fair.
C
I,
don't
think,
there's
any
harm
they
functionally
do
the
same
thing
that
the
difference
between
scaler
and
the
non-scalar
for
every
other
type
is
whether
it's
a
broadcast
or
fill-in.
The
first
element
in
this
case
that
means
the
same
thing
so
I,
don't
think,
there's
any
particular
harm
and
having
both.
C
C
C
C
B
A
B
C
C
B
B
C
B
B
E
B
B
C
C
C
C
B
B
C
So,
in
this
case,
it's
similar
to
the
previous,
but
rather
than
taking
a
raw
scalar
value
that
might
exist
in,
say
a
general
purpose
register.
This
picks
the
scalar
from
an
existing
vector.
So
you
could
say
broadcast
the
first
element
from
a
vector
to
every
element
of
this
new
vector
you're.
Creating
selected
scalar
is
the
naming
that
we've
used
for
some
of
the
other
intrinsics
we've
already
approved.
C
D
C
C
B
E
C
B
C
Like
it's
like
taking,
it's
like
an
array
assignment,
so
if
you
imagine
a
vector,
is
an
array,
then
you're
taking
the
element
from
value
you're,
basically
doing
value
or
result
result
index
equals
value
value
index.
So
the
rest
of
the
rest
of
result
stays
the
same
and
you're
only
modifying
the
value
at
a
given
index.
D
C
C
B
G
G
G
D
G
B
B
B
Why
yeah
cuz
I'm,
looking
at
this
I'm,
like
Jesus,
hey
I,
just
tried
to
find
the
difference
between
the
top
and
the
bottom
and
a
second,
it's
a
request
moment
addresses
that
I'm
willing
to
I
guess
double
is
missing
long.
You
long
right,
yeah,.
B
G
C
C
C
C
G
C
C
The
the
result,
if
you
look
at
the
operation
under
the
instruction,
the
result
is
always
128
bits.
So
if
we
took
64
bit
as
a
result
here
and
we
returned
64,
then
behind
the
scenes
the
processor
would
still
be
reading
a
128-bit
result
in
preserving
upper
bits.
Whatever
they
were
in
the
return
value
was.
G
C
C
C
G
C
So
this
first
set
is
just
called
shift
logical
because
it
doesn't
strictly
perform
either
a
left
shift
or
a
right
shift,
which
direction
the
shift
is
is
done,
is
selected
on
a
per
element
basis
based
on
whether
the
shift,
the
corresponding
element
in
the
shift
operand,
is
positive
or
negative.
If
it's
positive,
it's
a
left
shift.
If
it's
negative,
it's
a
right
shift
and.
C
C
C
B
Yeah
I
mean
to
me
reduce
the
number
of
overloads
I
generally
agree
with
there,
but
this
to
main
it
seems
kind
of
a
lost,
a
lost
war
anyway,
because
there's
like
so
many
of
them
and
yeah.
Given
that
there's
already
quite
a
ceremony
involved
in
calling
any
of
these
methods
because
they
all
tend
to
have
very
long
names
and
non
trivial
type
names,
it
seems
a
bit
backwards
to
make.
People
also
write
the
cast.
G
G
C
B
G
B
B
C
B
B
C
E
B
C
B
B
B
B
B
B
B
B
B
B
C
B
C
B
A
B
For
shift
left
shift
right,
all
the
ones
we
had
before,
instead
of
taking
a
vector
as
the
second
dagger,
we
just
take
it
constant.
That
is
a
bite.
Yes,
yes,
yep,
I,
think
in
that
case,
unless
somebody
has
a
desire
to
walk
them,
all
I
think
we
can
say
that's
it,
because
that
it
seems
like
winds
and
repeat
of
the
batter.
G
A
C
A
G
G
G
Right,
you
just
need
instruction
and
what
looks
like
they
described
from
the
operation
for
this
contraction
that
it's
just
masking
and
only
taken
to
account
to
load
it
be
meaning
with
your
first
time
in
one
of
the
register
lanes
and
trying
to
shift
right
will
effectively
shifted
by
one
instead
of
nine.
Well,.
C
G
C
C
G
A
If
what
they're
masking
is
everything
down
to
anything
that
would
fit,
you
know
less
than
or
equal
to
64
if
shift
bite
9?
Is
you
get
0
because
that
fit
in
the
encode
abble
range,
then,
like
that's
very
different
and
interesting
than
shift
left
65,
which
now
means
one
like
so
being
able
to
document,
but
it
does
have
tests
that
prove
what
it
does
are
all
goodness,
because
this
is
public
API.
C
C
A
A
B
C
It
is
effectively
returning
the
unsigned
saturation
rather
than
doing
a
shift
left
logical,
which
is
unsigned.
C
So
if
we
put
the
unsigned
after
left,
logical
I
think
that
would
imply
that
the
the
input
is
bit
cast
and
then
done
it
its
reinterpreted
and
then
done
the
shift
rich
versus
saturated
unsigned,
which
hopefully
makes
it
clear
that
the
left
shift
is
signed.
And
then
the
saturated
is
the
unsigned
thing.
Sure.
A
B
A
A
B
A
C
A
A
C
C
A
A
A
A
A
B
A
B
Is
that
all
we
call
it
before,
I
mean
I,
think
I've
seen
lower
before
much
of
a
narrow.
A
A
Like
it,
so,
if
I
understood
the,
if
I
understand
the
order
of
operations
that
Oh
like
this
would
do
the
shift
left
as
vector
64
of
s
bite
and
then,
after
it's
done
with
that,
it
will
essentially
just
widen
copy
it
to
a
vector
128
of
short,
which
means
there
was
never
an
upper
to
take
into
account.
Unless
this
is
on
the
weird
infinitely
precise
version
of
things
in.
C
A
A
C
B
F
C
B
I
mean
the
general
injustice
also
care
about
you
know,
consistency
and
that
people
can
predict
what
it
means
when
things
under
certain
types
right.
So
it's
so
long.
We
are
consistent
in
that
regards.
It's
fine
by
me,
I
mean.
Let
me
know
any
better
where
stuff
shifts
into
me,
where
were
they
actually
available
or
not?
Oh
I,.
A
C
So
today
they
can
go
to
source
dotnet,
go
type
in
advance,
sim,
D
and
then
type
in
squish
horn
and
they'll
find
it
Egor
Bois
wrote
a
tool
for
x64
that
map's
the
names
between
the
two
of
them
I'm
likely
going
to
ping
him
and
see.
If
he's
willing
to
extend
that
to
support
arm
as
well,
I
believe
it's
open
source,
so
I
could
probably
even
submit
a
PR
there,
but
that's
what
people
are
largely
using
today.
C
B
Thing
we
could
be
doing
that
crazy
idea.
I
would
not
actually
do
that,
but
you
know
that
in
in
Visual,
Studio
and
I
think
vs
code
is
that
there's
snippets,
which
is
so,
for
example,
if
you
say
for
and
then
you
tap,
we
generate
a
full
loop
for
you.
You
could
imagine
that
we
have
snippets
for
all
the
instructions.
So
when
you
say
it
squish
one
tab,
we
would
actually
extend
this
to
shift,
write,
arithmetic
and
narrow
round
a
set
rate
lower,
for
example,
that
one
would
be
very
easy
to.
A
Just
I
know
that
we
like
that
when
we
started
doing
the
intrinsic
sweet,
we
said
we
wanted
this.
You
know
semantic
names
instead
of
just
the
yeah
assembly
names,
but
as
long
as
we've
thought
about
the
scenario
where
somebody's
more
familiar
with
the
assembly
name
and-
and
we
have
a
story
or
we
at
least
think
that
in
the
future,
we'll
want
a
better
story
than
that
I'm,
just
making
sure
we
thought
of
it
honestly.
B
B
B
Helps
with
these
names
formally
but
I
mean,
presumably
when
you
write
code
like
this,
you
probably
have
like
I,
don't
know
it's
certain
set
of
instructions
that
you
do
a
lot
and
so
probably
as
you're
doing
that
eventually
you'll,
you
know
to
just
use
the
word
again.
You
would
saturate
whatever
knowledge
you
need
to
have
to
be
successful.
B
B
B
C
C
B
C
C
B
A
B
A
C
C
A
C
Add
we
add,
emit
tests
that
validate
the
encoding
and
then
we
also
add
tests
that
call
all
of
these
methods
from
c-sharp
using
various
input
types,
including
fields,
locals
class
variables,
addresses,
etc.
We've
got
hundreds
of
thousands,
maybe
even
close
to
a
million
lines
of
tests
now
covering
all
of
X,
64
and
armed
school,
just
yeah.
So.
A
B
B
B
C
Igor
pointed
out
that
for
sign
and
zero
extend,
they
don't
take
a
shift.
These
would
largely
be
convenience
overloads
if
we
exposed
them,
they
can
be
achieved
by
using
shift
left
with
zero.
I
believe
is
the
actual
instruction
alias
so
whether
we
expose
them
as
just
a
question
of
do.
We
want
to
provide
that
convenience
to
end-users.
B
A
C
B
A
A
B
B
F
B
F
B
B
C
C
B
B
Right
you
just
get
away
with
this
upset,
though
right
I
mean
that's
I'm,
saying
you're
kind
of
deferring
it
just
to
the
party
that
actually
needs
them,
but
like
the
the
overall
encoding,
is
still
the
same
size,
probably
even
slightly
larger.
If
you
have
to
split
it
because
you
have
to
shift
it
across
the
assembly,
boundaries
I
think
metadata
is
smart
enough
that
if
you
use
the
same
string
for
like
hundreds
of
methods,
I
think
the
string
is
only
encoded
once,
but
given
that
we
have
these
Markov
chains,
there's
no
reuse
right.
B
B
B
Yeah,
it's
not
pretty
I
mean
I
mean
that's
something
that
we
need
to
consider
but
outside
at
this
point,
I,
don't
know
what
to
do
about
it,
because
at
this
point
we're
already
halfway
pregnant
right,
like
me,
already
have
very
long
names
and
all
the
other
instruction
sets
so
there's
not
much.
We
can
do
probably.
C
Something
that
could
be
done,
but
I'm
not
sure
if
it's
necessarily
a
good
idea
due
to
how
we
support
fall,
backs
for
not
immediate,
but
many
of
these
are
essentially
the
same
instruction,
but
with
a
flag
for
each
different
variant.
So
the
underlying
encoding
between
them
is
is
the
same
and
there's
basically
a
question
mark
for
a
rounded
versus
saturate
versus
null
right.
So
we
could
do
it
as
a
flag.
F
C
The
only
thing
I've
seen
with
two
large
strings
is
there's
like
Roslin
for
their
tests,
since
they
use
source
or
they
use
strings
for
all
of
their
test.
Compilation
sources
they've
hit
the
like
the
heap
limit
for
user
strings,
but
I'm,
not
I,
don't
think
we're
near
hitting
that
for
core
Lib
for
names
here.
B
B
C
B
B
C
C
B
B
C
A
A
D
C
A
C
B
C
C
E
E
E
C
B
A
G
A
G
Can
I
can
read
instruction?
Basically,
instruction
adds
each
vector
element
and
the
first
source,
the
floating
point
register
to
the
corresponding
vector
element
of
the
second
source
register
places
the
most
significant
half
of
the
result
in
projector
and
write
the
vector
to
the
lower
or
upper
half
or
destination.